Linux中的uniq命令是一个用于处理文本文件中相邻重复行的实用工具,它的名称来源于“unique”(唯一)的缩写,主要用于从输入中删除或标识重复的相邻行,虽然uniq命令看似简单,但结合其他命令(如sort)可以发挥强大的去重功能,本文将详细介绍uniq命令的语法、选项、实际应用场景,并通过示例帮助读者全面掌握其用法。

uniq命令的基本语法为uniq [选项] [输入文件 [输出文件]],如果不指定输入文件,默认从标准输入读取;如果不指定输出文件,默认输出到标准输出,需要注意的是,uniq命令仅处理相邻的重复行,因此如果需要处理文件中所有重复行(包括非相邻的),通常需要先使用sort命令对文件进行排序,这一点是uniq命令与去重相关的其他命令(如sort -u)的重要区别。
uniq命令的常用选项包括以下几种:
-c或--count:在每行行首显示该行在文件中出现的次数;-d或--repeated:仅显示重复出现的行;-D或--all-repeated[=delimit-method]:显示所有重复行,可选择以空行或指定符号分隔重复组;-u或--unique:仅显示不重复的行;-f或--skip-fields=N:跳过前N个字段进行比较;-i或--ignore-case:忽略大小写进行比较;-s或--skip-chars=N:跳过前N个字符进行比较;-w或--check-chars=N:仅比较前N个字符;-z或--zero-terminated:以空字符作为行分隔符而非换行符;--help:显示帮助信息;--version:显示版本信息。
以下通过具体示例说明uniq命令的用法,假设有一个名为test.txt的文件,内容如下:
apple
banana
apple
orange
banana
apple直接运行uniq test.txt,输出结果为:

apple
banana
orange
apple可以看到,uniq命令仅删除了相邻的重复行(第二行和第三行的apple),但保留了非相邻的重复行(第一行和第五行的apple),若需完全去重,需先使用sort命令:sort test.txt | uniq,输出结果为:
apple
banana
orange使用-c选项可以统计每行出现的次数,例如uniq -c test.txt的输出为:
1 apple
1 banana
1 apple
1 orange
1 banana
1 apple若需统计全局重复次数,可结合sort:sort test.txt | uniq -c,输出为:
3 apple
2 banana
1 orange-d选项仅显示重复行,例如uniq -d test.txt输出为:

apple
banana而-u选项仅显示不重复行,uniq -u test.txt输出为:
orange-f选项用于跳过字段比较,假设test2.txt内容为:
1 apple
2 banana
1 apple
3 orange
2 banana
4 apple运行uniq -f 1 test2.txt(跳过第一个字段比较),输出为:
1 apple
2 banana
3 orange
4 apple此时uniq仅根据第二个字段去重,而忽略第一个字段。
-i选项忽略大小写,例如test3.txt内容为:
Apple
banana
apple
Orange
BANANA运行uniq -i test3.txt,输出为:
Apple
banana
Orange可以看到Apple和apple被视为相同行,banana和BANANA也被视为相同行。
uniq命令在日志分析、数据清洗等场景中非常实用,分析服务器日志时,可以使用sort access.log | uniq -c | sort -nr统计访问频率最高的IP地址;在处理CSV文件时,可通过uniq -f 1 data.csv去除基于某一字段的重复行。
需要注意的是,uniq命令对输入文件的顺序有严格要求,仅处理相邻行,在实际应用中,通常需要先通过sort命令对文件进行排序,以确保所有重复行相邻。uniq命令默认区分大小写,若需忽略大小写,需使用-i选项。
以下是一个综合示例:假设有一个包含用户登录信息的日志文件login.log如下:
user1 192.168.1.1
user2 192.168.1.2
user1 192.168.1.1
user3 192.168.1.3
user2 192.168.1.2若需统计每个用户的登录次数,可运行:
sort login.log | uniq -c | sort -nr输出结果为:
2 user1 192.168.1.1
2 user2 192.168.1.2
1 user3 192.168.1.3若需仅显示重复登录的用户,可运行:
sort login.log | uniq -d输出结果为:
user1 192.168.1.1
user2 192.168.1.2相关问答FAQs:
问:
uniq命令和sort -u命令有什么区别?
答:uniq命令仅删除相邻的重复行,而sort -u命令会先对文件进行排序,然后删除所有重复行(包括非相邻的)。sort -u可以实现全局去重,而uniq仅处理相邻重复行,对于文件内容为b\na\nb,uniq输出为b\na\nb,而sort -u输出为a\nb。问:如何使用
uniq命令统计文件中每个单词的出现次数?
答:可以通过结合tr、sort和uniq命令实现,统计file.txt中每个单词的出现次数,可运行:tr ' ' '\n' < file.txt | sort | uniq -c | sort -nr,该命令首先将空格替换为换行符(将单词分行),然后排序,再用uniq -c统计次数,最后按次数降序排列。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/410950.html<
