Linux uniq命令介绍
uniq命令,即unique,主要用于在文本文件中找出或者删除重复出现的行,一般和sort命令结合使用。uniq命令不仅可以将文件中的重复行进行删除,还可以对重复的行进行计数,或者只显示重复的行等。
Linux uniq命令适用的Linux版本
uniq命令在众多Linux发行版中都有应用,包括但不限于Ubuntu, Debian, Fedora, CentOS等。如在一些Linux版本中没有预装uniq命令,可以使用以下命令进行安装:
对于使用apt的系统 (如 Debian 或 Ubuntu):
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install uniq
对于使用yum的系统 (如 CentOS 7):
[linux@bashcommandnotfound.cn ~]$ sudo yum install uniq
对于使用dnf的系统(如Centos 8):
[linux@bashcommandnotfound.cn ~]$ sudo dnf install uniq
Linux uniq命令的基本语法
命令格式如下
uniq [OPTION]... [INPUT [OUTPUT]]
Linux uniq命令的常用选项或参数说明
选项 | 说明 |
---|---|
-c | 在每行前面加上此行在文件中出现的次数。 |
-d | 只显示重复行。 |
-D | 显示所有重复行。 |
-f | 忽略前N个字段。 |
-s | 忽略前N个字符。 |
–help | 显示帮助信息。 |
–version | 显示版本信息。 |
Linux uniq命令实例详解
以下实例帮助理解如何使用uniq命令。
实例1:使用uniq命令删除文本文件中的重复行
[linux@bashcommandnotfound.cn ~]$ sort file.txt | uniq
实例2:使用uniq命令统计每行在文件中出现的次数
[linux@bashcommandnotfound.cn ~]$ sort file.txt | uniq -c
实例3:使用uniq命令只显示重复过的行
[linux@bashcommandnotfound.cn ~]$ sort file.txt | uniq -d
实例4:查看日志文件中出现频率最高的10个IP
[linux@bashcommandnotfound.cn ~]$ awk '{print $1}' access.log | sort | uniq -c | sort -rn | head
这个命令首先使用awk命令提取出日志文件中的IP地址,然后排序和去重,最后列出频率最高的10个IP。
实例5:在uniq操作中跳过前N个字符
开发在进行某些操作时,可能希望从行的中间部分开始去重,这时可以使用-s选项来跳过行开头的字符。
[linux@bashcommandnotfound.cn ~]$ uniq -s N filename
我们需要将N替换为你想要跳过的字符数。
实例6:在uniq操作中跳过前N个字段
与-s选项类似,-f选项也可以让uniq命令跳过特定数量的字段。
[linux@bashcommandnotfound.cn ~]$ uniq -f N filename
我们需要将N替换为你想要跳过的字段数。
实例7:显示所有重复行
如果你想查看文本文件中的所有重复行,可以使用-D选项。
[linux@bashcommandnotfound.cn ~]$ uniq -D filename
这样可以显示文件中的所有重复行。
实例8:使用uniq命令制作字典文件
使用uniq命令可以帮助我们从一大段文本中提取出所有的单词,并制作成字典文件。
[linux@bashcommandnotfound.cn ~]$ cat file.txt | tr -c '[:alnum:]' '[\n*]' | sort | uniq > dictionary.txt
在这个实例中,我们使用tr命令将所有不是字母和数字的字符都替换成了换行符,这样就将所有的单词都分割开了。然后使用sort和uniq对这些单词进行排序和去重,最后保存到dictionary.txt文件中。
实例9: 精确控制uniq选择行
uniq -z选项可以使uniq将输出项以NULL字符结束,而不是换行符。
[linux@bashcommandnotfound.cn ~]$ sort file.txt | uniq -z
这将把所有独立的行压缩成一个长的输出行,并使用空格替换输入行中的新行字符。
实例10: 不进行排序的情况下合并文件
有时我们需要合并文件,但不能排序(例如日志文件),可以使用下面的命令:
[linux@bashcommandnotfound.cn ~]$ awk '!a[$0]++' unsorted-file.txt
awk的关联数组a在这里用于记录每个行已经报告的次数。当a[$0]的值为1时,新行就不会打印。
实例11: uniq -u选项输出唯一的行
默认情况下,uniq从输入中删除重复的行。-u选项告诉uniq只显示那些在输入中唯一出现的行。
[linux@bashcommandnotfound.cn ~]$ sort file.txt | uniq -u
这将只显示文件中出现一次的行。
实例12: 移除文件中重复的单词
我们可以使用uniq命令从名称列表中删除重复的名字。
[linux@bashcommandnotfound.cn ~]$ echo "google ibm google microsoft ibm apple" | tr ' ' '\n' | sort | uniq
这个例子中,我们首先使用echo输出一串文字,然后用tr命令将空格替换为换行符,之后排序并使用uniq删除重复项。
Linux uniq命令的注意事项
uniq命令只能检测相邻的重复行,所以一般我们在使用uniq之前会使用sort命令先对文件进行排序。若执行时出现bash: uniq: command not found,可按照上面的方法进行安装Linux uniq相关命令
sort命令:排序或对文件进行归并
cat命令:用于显示文件的全部内容
tail命令:在屏幕上显示指定文件的尾部若干行
grep命令:使用正则表达式进行模式匹配,是一种强大的文本搜索工具。
awk命令:一种处理数据的编程语言,在处理文本和数据上相当强大。
sed命令:主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
cut命令:Linux下的一个截取字符串的命令。
wc命令:用于统计指定文件中的字节数、字数、行数。
head命令:用于显示文件的开头部分内容。
find命令:用来在指定目录下查找文件。
tr命令:用于删除一段文本信息中的字符,或者进行字符转换。