1.命令作用
过滤标准输入的相邻匹配行,写入标准输出(Filter adjacent matching lines from INPUT (or standard input),writing to OUTPUT (or standard output).)
简单作用解释为,删除文件中多余的相邻相同行,仅保留一行。
如果没有选项,匹配的行将合并到第一个出现(With no options, matching lines are merged to the first occurrence.)
2.命令语法
Usage: uniq [OPTION]... [INPUT [OUTPUT]]
3.参数详解
OPTION:
- -c, --count,以出现的次数作为行前缀
- -d, --repeated,只打印相邻的重复行,多个相邻重复行仅打印一次/一次
- -D, --all-repeated[=METHOD],打印所有相邻的重复行,可以用空行分隔,也可以指定分隔方式,METHOD={none(default),prepend,separate};-D相当于--all-repeated=none,重复行组中间不用分隔,METHOD=prepend是重复行组前用空行分隔,METHOD=separate是重复行组之间用空行分隔
- -f, --skip-fields=N,避免比较前N个字段,字段之间以空格分隔
- --group[=METHOD],显示所有组(包括相邻重复组、单行不重复组),用空行分隔组,METHOD={separate(default),prepend,append,both},separate表示组之间使用空行分隔组,prepend表示组前用空行分隔组,append表示组后用空行分隔组,both表示组前组后都用空行分隔
- -i, --ignore-case,比较时忽略大小写差异
- -s, --skip-chars=N,避免比较前N个字符
- -u, --unique,只打印唯一的行,相邻重复的行不打印,与-D功能相反
- -z, --zero-terminated,以0字节结束行,而不是换行,打印所有行,不做任何操作
- -w, --check-chars=N,每行比较不超过N个字符
4.常用用例
4.1.默认相邻连续重复行去重
[root@node2 Desktop]# cat file1.txt
AAAA
aaaa
aaaa
aaaa
dddd
cccc
bbbb
bbbb
[root@node2 Desktop]# uniq file1.txt
AAAA
aaaa
dddd
cccc
bbbb
[root@node2 Desktop]#
去重说明:相邻连续重复的行去重留一行,其他的输出不变
4.2.打印重复次数显示(-c)
[root@node2 Desktop]# uniq -c file1.txt
1 AAAA
3 aaaa
1 dddd
1 cccc
2 bbbb
[root@node2 Desktop]#
去重说明:在输出行首输出重复的次数,用于统计重复次数,一般先sort排序,然后uniq去重
4.3.忽略大小写去重(-i)
[root@node2 Desktop]# cat file1.txt
AAAA
aaaa
aaaa
aaaa
dddd
cccc
bbbb
bbbb
[root@node2 Desktop]# uniq -i file1.txt
AAAA
dddd
cccc
bbbb
[root@node2 Desktop]#
去重说明:-i参数是忽略大小写,则大写的AAAA与小写的aaaa视为相同的行,去重只显示一次
4.4.前N个字符后对比去重(-s)
[root@node2 Desktop]# cat file2.txt
AAAA
aaaa
aaaa
aaaa
aabb
ddbb
dddd
cccc
dddd
bbbb
bbbb
eeee
[root@node2 Desktop]# uniq -s 2 file2.txt
AAAA
aaaa
aabb
dddd
cccc
dddd
bbbb
eeee
[root@node2 Desktop]#
去重说明:-s参数是每行前n个字符后对比,相同则去重输出,那么aabb与ddbb两行去掉前两个字符后都是bb相同,则输出只显示aabb,不显示ddbb
4.5.前N个字符对比去重(-w)
[root@node2 Desktop]# uniq -w 2 file2.txt
AAAA
aaaa
ddbb
cccc
dddd
bbbb
eeee
[root@node2 Desktop]#
去重说明:-w参数是每行前n个字符对比,相同则去重输出,那么aaaa与aabb前两个字符都是aa相同,则输出只显示aaaa,不显示aabb;ddbb与dddd前两个字符都是dd,则输出只显示ddbb,不显示dddd;以下类似
4.6.前N个字段后对比去重(-f)
[root@node2 Desktop]# cat file3.txt
1 AAAA
2 aaaa
3 aaaa
4 aaaa
5 aabb
6 ddbb
7 dddd
8 cccc
9 dddd
10 dddd
11 bbbb
12 bbbb
[root@node2 Desktop]# uniq -f 1 file3.txt
1 AAAA
2 aaaa
5 aabb
6 ddbb
7 dddd
8 cccc
9 dddd
11 bbbb
[root@node2 Desktop]#
去重说明:-f参数是按空格分隔字段,按照-f指定的字段数后对比去重,如上文件,第一列(字段)是行值,如果都考虑第一列(字段),那么不会有重复的行;去掉第一列(字段),那么9行和10行都是dddd,去重后仅显示9行的dddd
4.7.统计重复结果次数排序
[root@node2 Desktop]# uniq -c file1.txt | sort -nr
3 aaaa
2 bbbb
1 dddd
1 cccc
1 AAAA
[root@node2 Desktop]#
去重说明:基于4.2用例结果,使用sort -nr以字符数值及倒叙输出,得到从大到小排序输出