uniq
用于报告或忽略重复的行。uniq
通常与 sort
命令一起使用,因为 uniq
只能识别相邻的重复行。
基本用法
uniq [OPTION]... [INPUT [OUTPUT]]
常用选项
-c
:前置行数
uniq -c filename
例子:统计每行出现的次数。
-d
:只输出重复行
uniq -d filename
例子:只显示重复的行。
-u
:只输出不重复行
uniq -u filename
例子:只显示不重复的行。
-i
:忽略大小写
uniq -i filename
例子:忽略大小写进行比较。
-f
:忽略字段
uniq -f N filename
例子:忽略前 N 个字段。
-s
:忽略字符
uniq -s N filename
例子:忽略每行前 N 个字符。
-w
:比较前 N 个字符
uniq -w N filename
例子:只比较每行前 N 个字符。
--help
:显示帮助信息
uniq --help
例子:显示所有选项的详细说明。
示例文件
假设有一个文件 example.txt
,内容如下:
apple
banana
apple
orange
banana
grape
统计行数
前置每行出现的次数:
uniq -c example.txt
输出:
1 apple
1 banana
1 apple
1 orange
1 banana
1 grape
只输出重复行
只显示重复的行:
uniq -d example.txt
由于 uniq
只能识别相邻的重复行,输出为空。
如果对文件进行排序后再使用 uniq
:
sort example.txt | uniq -d
输出:
apple
banana
只输出不重复行
只显示不重复的行:
uniq -u example.txt
由于 uniq
只能识别相邻的重复行,输出为原文件内容。
如果对文件进行排序后再使用 uniq
:
sort example.txt | uniq -u
输出:
grape
orange
忽略大小写
忽略大小写进行比较:
uniq -i example.txt
输出和原文件相同,因为没有相邻的重复行。
如果对文件进行排序后再使用 uniq
:
sort -f example.txt | uniq -i
输出:
apple
banana
grape
orange
忽略字段
假设有一个文件 fields.txt
,内容如下:
1 apple
2 banana
3 apple
4 orange
5 banana
6 grape
忽略前一个字段:
uniq -f 1 fields.txt
输出:
1 apple
2 banana
3 apple
4 orange
5 banana
6 grape
如果对文件进行排序后再使用 uniq
:
sort -k2 fields.txt | uniq -f 1
输出:
1 apple
2 banana
6 grape
4 orange
忽略字符
假设有一个文件 chars.txt
,内容如下:
aaapple
aabanana
bbapple
bbbanana
ccgrape
忽略前两个字符:
uniq -s 2 chars.txt
输出:
aaapple
aabanana
bbapple
bbbanana
ccgrape
如果对文件进行排序后再使用 uniq
:
sort chars.txt | uniq -s 2
输出:
aaapple
aabanana
ccgrape
比较前 N 个字符
只比较每行前 N 个字符:
uniq -w 5 chars.txt
输出:
aaapple
bbapple
ccgrape
排序并使用 uniq
通常情况下,uniq
与 sort
结合使用,以确保相同的行是相邻的。例如:
sort filename | uniq
处理输出
可以将 uniq
的输出重定向到新文件:
sort example.txt | uniq > unique_example.txt