黄石市建设局网站湖南众诚建设 官方网站
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 AAAA3 aaaa1 dddd1 cccc2 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 -nr3 aaaa2 bbbb1 dddd1 cccc1 AAAA
[root@node2 Desktop]#
去重说明:基于4.2用例结果,使用sort -nr以字符数值及倒叙输出,得到从大到小排序输出