5.4 使用uniq删除重复内容

如果文件(或标准输出)中有多行完全相同的内容,我们很自然希望能删除重复的行,同时还可以统计出完全相同的行出现的总次数,uniq命令就能帮助解决这个问题。下面列出了该命令常用的参数:


  1. [root@localhost ~]# uniq [-ic]

  2. #-i

  3. 忽略大小写

  4. #-c

  5. 计算重复行数


为演示uniq的用法,这里首先创建一个文件,文件名和文件内容如下:


  1. [root@localhost ~]# cat uniq.txt

  2. abc

  3. 123

  4. abc

  5. 123


需要说明的是,uniq一般都需要和sort命令一起使用,也就是先将文件使用sort进行排序(这样重复的内容就能显示在连续的几行中),然后再使用uniq删除掉重复的内容(uniq的作用就在于删除连续的完全一致的行)。读者观察一下以下两次命令的输出,第一次直接cat输出文件,然后使用uniq命令,输出的内容居然和原文件uniq.txt的内容是一样的,这是因为uniq命令只会对比相邻的行,如果有连续相同的若干行则删除重复内容,仅输出一行。如果相同的行非连续,则uniq命令不具备删除效果。第二次则在使用sort排序后再使用uniq命令,这时就达到了预期的效果。


  1. [root@localhost ~]# cat uniq.txt | uniq

  2. abc

  3. 123

  4. abc

  5. 123

  6. [root@localhost ~]# cat uniq.txt | sort | uniq

  7. 123

  8. abc

  9. #

  10. 使用-c

  11. 参数就会在每行前面打印出该行重复的次数

  12. [root@localhost ~]# cat uniq.txt | sort | uniq -c

  13. 2 123

  14. 2 abc