uniq命令使用说明
1、命令概述
uniq命令全称是“unique”,中文释义是“独特的,唯一的”。该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行。去除了重复的,保留的都是唯一的,也就是独特的,唯一的了。
我们应当注意的是,它和sort -u的区别,sort -u只要有重复行,它就去除,而uniq重复行必须要连续,也可以用它忽略文件中的重复行。
2、命令语法
uniq【选项】 【文件】
3、命令选项
-c, --count #在每行前加上表示相应行目出现次数的前缀编号
-d, --repeated #只输出重复的行,每个重复纪录只出现一次
-D, --all-repeated #只输出重复的行,不过有几行输出几行
-f, --skip-fields=N #-f 忽略比较指定的栏位;,-f 1 忽略第一列
-i, --ignore-case #不区分大小写
-s, --skip-chars=N #根-f有点像,不过-s是忽略, -s 5就表示忽略最前面的5个字符(包括空格)
-u, --unique #只显示没有重复的纪录,根mysql的distinct功能上有点像,
-z, --zero-terminated #在末尾使用\0,而不是换行符。
-w, --check-chars=N #对每行第N 个字符以后的内容不作对照,指定要比较的字符。
4、命令示例
4.1 删除文件中连续重复的行:
1 [root@lzg ~]# cat a.txt 2 test 30 3 Hello 95 4 test 30 5 test 30 6 Linux 85 7 Hello 95 8 Hello 95 9 Hello 95 10 Linux 85 11 Linux 85 12 [root@lzg ~]# uniq a.txt 13 test 30 14 Hello 95 15 test 30 16 Linux 85 17 Hello 95 18 Linux 85 19 [root@lzg ~]#
4.2 -c 统计每行在文件中出现重复的次数(连续重复):
1 [root@lzg ~]# uniq -c a.txt 2 1 test 30 3 1 Hello 95 4 2 test 30 5 1 Linux 85 6 3 Hello 95 7 2 Linux 85 8 [root@lzg ~]#
4.3 -d 只显示有重复的纪录,且每个纪录只出现一次:
1 [root@lzg ~]# cat b.txt 2 test 30 3 test 30 4 Mack 20 5 Hello 95 6 Hello 95 7 Hello 95 8 Gloc 80 9 Linux 85 10 Linux 85 11 [root@lzg ~]# uniq -d b.txt 12 test 30 13 Hello 95 14 Linux 85 15 [root@lzg ~]#
4.4 -u 只显示没有重复的行:
1 [root@lzg ~]# cat b.txt 2 test 30 3 test 30 4 Mack 20 5 Hello 95 6 Hello 95 7 Hello 95 8 Gloc 80 9 Linux 85 10 Linux 85 11 [root@lzg ~]# uniq -u b.txt 12 Mack 20 13 Gloc 80 14 [root@lzg ~]#
4.5 -D 显示所有重复过的行:
1 [root@lzg ~]# cat a.txt 2 test 30 3 Hello 95 4 test 30 5 test 30 6 Linux 85 7 Hello 95 8 Hello 95 9 Hello 95 10 Linux 85 11 Linux 85 12 [root@lzg ~]# uniq -D a.txt 13 test 30 14 test 30 15 Hello 95 16 Hello 95 17 Hello 95 18 Linux 85 19 Linux 85 20 [root@lzg ~]#
4.6 -f1 忽略第一列:
1 [root@lzg ~]# cat c.txt 2 this is a test 3 this is a test 4 this is a test 5 i am tank 6 i love tank 7 i love tank 8 this is a test 9 whom have a try 10 WhoM have a try 11 you have a try 12 i want to abroad 13 those are good men 14 we are good men 15 [root@lzg ~]# uniq -f1 -c c.txt 16 3 this is a test 17 1 i am tank 18 2 i love tank 19 1 this is a test 20 2 whom have a try 21 1 you have a try 22 1 i want to abroad 23 2 those are good men #忽略了第一列,所以显示2行 24 [root@lzg ~]#
4.7 -s忽略指定数量的字符:
1 [root@lzg ~]# uniq -s4 -c c.txt #忽略每行的前4个字符,这样whom have a try 就和 you have a try 就一样了。 2 3 this is a test 3 1 i am tank 4 2 i love tank 5 1 this is a test 6 3 whom have a try 7 1 i want to abroad 8 1 those are good men 9 1 we are good men 10 [root@lzg ~]#
4.8 -w2 对每行第2个字符后面的内容不做检查:
1 [root@lzg ~]# uniq -w2 -c c.txt 2 3 this is a test 3 3 i am tank 4 1 this is a test 5 1 whom have a try 6 1 WhoM have a try 7 1 you have a try 8 1 i want to abroad 9 1 those are good men 10 1 we are good men 11 [root@lzg ~]#