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 ~]# 

 

posted @ 2019-10-24 14:25  网络小白-lzg  阅读(1088)  评论(0编辑  收藏  举报