uniq 命令
uniq 命令经常和 sort 命令结合在一起使用。uniq 从标准输入或单个文件名参数接受数据有序列表,默认情况下,从数据列表中删除任何重复行。uniq 只能用于排过序的数据输入,因此,uniq 要么使用管道,要么将排过序的文件作为输入,并总是以这种方式与 sort 命令结合起来使用。uniq 命令是 unique 的缩写。
(1)命令格式
uniq [选项] [文件名]
(2)常用参数
参数 | 描述 |
---|---|
-c | 在每行前加上表示相应行目出现次数的前缀编号 |
-d | 只输出重复的行 |
-u | 只显示唯一的行 |
-D | 显示所有重复的行 |
-f | 比较时跳过前 n 列 |
-i | 在比较的时候不区分大小写 |
-s | 比较时跳过前 n 个字符 |
-w | 对每行第 n 个字符以后的内容不作对照 |
(3)常用范例
例一:找出/bin 目录和/usr/bin 目录下所有相同的命令,可以使用如下命令:
ls /bin /usr/bin | sort | uniq -d
例二:现有文件内容如下,红色方框里的内容表示区号,现在要统计出各个区号的总人数。
实现思路:首先按区号对每行信息排序,然后使用 uniq 命令对区号进行重复行统计。使用命令如下:
sort -k 4.1n student.txt | uniq -c -f 3 -w 2
sort -k 4.1n,4.1n 表示对第四个字段的第一个字符按数值排序。
uniq -c -f 3 -w 2 中-f 3 表示跳过前三列的比较,那么现在只剩下最后一列,-w 2 表示第 2 个字符后的内容不做比较,为什么是 2 呢,因为跳过前三列时并没有跳过最后一列前面的空格分隔符,区号前都还有一个空格。