uniq命令的使用
本节主要介绍一下uniq命令的使用。
# cat /etc/centos-release CentOS Linux release 7.3.1611 (Core) # uname -a Linux sz-oss-01.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
1. uniq命令
uniq
命令用于报告或删除重复的行。其基本语法如下:
uniq [OPTION]... [INPUT [OUTPUT]]
1.1 相关选项
uniq
命令用于过滤相邻的匹配行,并将结果输出到标准输出。下面介绍一下常用选项:
2. 使用示例
1) 对无序文件去重无效
# cat testfile.txt hello world friend hello world hello # uniq ./testfile.txt hello world friend hello world hello
上面我们看到,直接删除未经排序的文件,将会发现没有任何行被删除。
2) uniq结合sort命令,对排序文件进行去重
3) 排序之后删除重复行,同时在行首位置输出该行重复的次数
4) 仅显示存在重复的行,并在行首显示该行重复的次数
# cat testfile.txt hello world friend hello world hello # sort testfile.txt | uniq -dc 3 hello 2 world
5) 仅显示不重复的行
6) 仅显示重复的行,且显示重复行的所有行
# cat testfile.txt hello world friend hello world hello # sort testfile.txt | uniq --all-repeated=prepend hello hello hello world world # sort testfile.txt | uniq -D hello hello hello world world
7) 通过-w选项比较前N个字符
uniq默认是比较相邻行的所有内容来判断是否重复,我们可以通过选项-w
或--check-chars=N
指定比较前N个字符。比如我们有如下内容的文件test.txt:
# cat test.txt apple application api # uniq -w3 -D test.txt apple application
8) 统计行数
如下我们只显示重复的内容:
# last | awk '{S[$3]++} {for(a in S){print a}}' | sort | uniq -d 10.133.143.106 10.133.143.107 10.133.143.116 10.133.143.122 10.133.146.43 10.133.146.47 10.133.146.55 10.133.146.59 10.133.146.60 10.133.146.67 10.133.147.43 10.133.150.111 10.133.150.6 10.133.150.83 10.133.150.85 172.28.144.18 172.28.144.47 boot
如下我们只显示出现一次的行:
[参看]