uniq忽略文件中的重复行
作用:文件经过处理后,在它的输出文件中可能会出现重复的行。例如,使用 cat 命令将
两个文件合并后,再使用 sort 命令进行排序,就可能出现重复行。这时可以使用 uniq 命令将这
些重复行从输出文件中删除,只留下每条记录的唯一样本。
用法:uniq [选项]…[输入[输出]]
主要选项如下。
长选项必须使用的参数对于短选项也是必须使用的。
命令 | 描述 |
-c,--count |
在每行前加上表示相应行目出现次数的前缀编号。 |
-d,--repeated |
只输出重复的行。 |
-D,--all-repeated[=delimit-method |
显示所有重复的行。 |
delimit-method={none(default),prepend,separate} |
以空行为界限。 |
-f,--skip-fields=N |
在比较时跳过前 N 列。 |
-i,--ignore-case |
在比较的时候不区分大小写。 |
-s,--skip-chars=N |
在比较时跳过前 N 个字符。 |
-u,--unique |
只显示唯一的行。 |
-z,--zero-terminated |
使用’\0’作为行结束符,而不是新换行。 |
-w,--check-chars=N |
对每行第 N 个字符以后的内容不作对照。 |
--help |
显示此帮助信息并退出。 |
-version |
显示版本信息并退出。 |
案例练习
首先看一下示例文件。
$ cat happy Happy Birthday to You! Happy Birthday to You! Happy Birthday Dear cjh! Happy Birthday to You!
(1)显示文件 happy 中不重复的行。
# uniq -u happy Happy Birthday Dear cjh! Happy Birthday to You!
(2)显示文件 happy 中不重复的行,从第二个字段的第二个字符开始进行比较。
#uniq -u -1 +1 happy
(3)用-c 选项从 uniq 中获取一些统计信息。
#sort happy | uniq -dc 3 Happy Birthday to You!
这里uniq命令借助管道命令从标准输入设备读取文件,首先使用sort命令对文件进行排序, 然后对排序结果进行操作。
(4)删除文件中重复的行并输出到一个新文件。
#sort happy|uniq-uniqhappy
(5)高级应用。
就算 uniq 对完整的行进行比较,它仍然会很有用,但是那并非该命令的全部功能。特别方 便的是,使用-f 选项,后面跟着要跳过的字段数,它能够跳过给定数目的字段。在查看系统日 志时非常有用。通常,某些项要被复制许多次,这使得查看日志很困难。使用简单的 uniq 无法 完成任务,因为每一项都以不同的时间戳记开头。但是如果告诉它跳过所有的时间字段,日志 一下子就会变得便于管理。试一试 uniq -f 3 /var/log/messages。还有另一个选项-s,它的功能就 像-f 一样,但是跳过给定数目的字符。可以一起使用-f 和-s,uniq 先跳过字段,再跳过字符。 如果只想使用一些预先设置的字符进行比较,试试-w 选项。
注意:请不要使用 uniq 或任何其他工具从包含财务或其他重要数据的文件中除去重复 行。在这种情况下,重复行几乎总是表示同一金额的另一个交易,将它除去会给会计 部造成许多困难。