Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,长修远,我们不能没有钱
随笔 - 172, 文章 - 0, 评论 - 257, 引用 - 0
数据加载中……

技巧: 用 uniq 除去重复行(转载自ibm论坛)

    重复行通常不会造成问题,但是有时候它们的确会引起问题。
    此时,不必花上一个下午的时间来为它们编制过滤器,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 或任何其它工具从包含财务或其它重要数据的文件中除去重复行。
    在这种情况下,重复行几乎总是表示同一金额的另一个交易,将它除去会给会计部造成许多困难。千万别这么干!
     

如果您希望您的工作轻松点,比如只显示唯一的或重复的行,那么该怎么办呢?您可以用 -u (唯一)和 -d (重复)选项来做到这一点,例如:
清单 2. 使用 -u 和 -d 选项
$ sort happybirthday.txt | uniq -u
Happy Birthday Dear Tux!
$ sort happybirthday.txt | uniq -d
Happy Birthday to You!


清单 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 和 -s 。
uniq 先跳过字段,再跳过字符。如果您只想使用一些预先设置的字符进行比较,那么该怎么办呢?试试看 -w 选项。


posted on 2007-11-19 10:23 Khan 阅读(1066) 评论(1)  编辑 收藏 引用 所属分类: 跨平台开发周边技术

评论

# re: 技巧: 用 uniq 除去重复行(转载自ibm论坛)  回复  更多评论   

那么该怎么办呢?
2008-12-27 10:07 | 北京论坛

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理