10.Linux文件管理命令—uniq忽略文件中的重复行


文章目录

  • uniq忽略文件中的重复行
  • 案例练习


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 或任何其他工具从包含财务或其他重要数据的文件中除去重复 行。在这种情况下,重复行几乎总是表示同一金额的另一个交易,将它除去会给会计 部造成许多困难。