用 uniq 除去重复行

重复行通常不会造成问题,但是有时候它们的确会引起问题。此时,不必花上一个下午的时间来为它们编制过滤器,uniq 命令便是唾手可得的好工具。

    了解一下它是如何节省您的时间和精力的。进行排序之后,您会发现有些行是重复的。有时候该重复信息是不需要的,可以将它除去以节省磁盘空间。不必对文本行进行排序,但是您应当记住 uniq 在读取行时会对它们进行比较并将只除去两个或更多的连续行。下面的示例说明了它实际上是如何工作的:

清单 1. 用 uniq 除去重复行

				
        $ cat happybirthday.txt
Happy Birthday to You!
Happy Birthday to You!
Happy Birthday Dear Tux!
Happy Birthday to You!
        $ sort happybirthday.txt 
Happy Birthday Dear Tux!
Happy Birthday to You!
Happy Birthday to You!
Happy Birthday to You!
        $ sort happybirthday.txt | uniq
Happy Birthday Dear Tux!
Happy Birthday to You!

警告:请不要使用 uniq 或任何其它工具从包含财务或其它重要数据的文件中除去重复行。在这种情况下,重复行几乎总是表示同一金额的另一个交易,将它除去会给会计部造成许多困难。千万别这么干!

有关 uniq 的更多信息

本系列文章介绍了文本实用程序,它对在手册页和信息页找到的信息作了补充。如果您打开新的终端窗口并输入 man uniqinfo uniq ,或者打开新的浏览器窗口并查看 位于 gnu.org 的 uniq 手册页,那么就可以了解更多的相关信息。

清单 2. 使用 -u 和 -d 选项

				
        $ sort happybirthday.txt | uniq -u
Happy Birthday Dear Tux!
        $ sort happybirthday.txt | uniq -d
Happy Birthday to You!

您还可以用 -c 选项从 uniq 中获取一些统计信息:

清单 3. 使用 -c 选项
				
        $ sort happybirthday.txt | uniq -uc
      1 Happy Birthday Dear Tux!
        $ sort happybirthday.txt | uniq -dc
      3 Happy Birthday to You!
      

    就算 uniq 对完整的行进行比较,它仍然会很有用,但是那并非该命令的全部功能。特别方便的是:使用 -f 选项,后面跟着要跳过的字段数,它能够跳过给定数目的字段。当您查看系统日志时这非常有用。通常,某些项要被复制许多次,这使得查看日志很难。使用简单的 uniq 无法完成任务,因为每一项都以不同的时间戳记开头。但是如果您告诉它跳过所有的时间字段,您的日志一下子就会变得更加便于管理。试一试 uniq -f 3 /var/log/messages ,亲眼看看。

    还有另一个选项 -s ,它的功能就像 -f 一样,但是跳过给定数目的字符。您可以一起使用 -f-suniq 先跳过字段,再跳过字符。如果您只想使用一些预先设置的字符进行比较,那么该怎么办呢?试试看 -w 选项。

转载于:https://www.cnblogs.com/aquester/archive/2012/07/24/9891946.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值