Chinaunix首页 | 论坛 | 博客
  • 博客访问: 151056
  • 博文数量: 55
  • 博客积分: 2409
  • 博客等级: 大尉
  • 技术积分: 371
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-10 14:19
文章分类

全部博文(55)

文章存档

2012年(5)

2011年(15)

2010年(6)

2009年(29)

我的朋友

分类:

2009-11-20 13:09:02

技巧: 用 uniq 除去重复行

认识您的文本实用程序

developerWorks
文档选项
将打印机的版面设置成横向打印模式

将此页作为电子邮件发送

将此页作为电子邮件发送


级别: 初级

Jacek Artymiak (), 自由顾问、开发人员和作家

2003 年 7 月 06 日

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

进行排序之后,您会发现有些行是重复的。有时候该重复信息是不需要的,可以将它除去以节省磁盘空间。不必对文本行进行排序,但是您应当记住 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 或任何其它工具从包含财务或其它重要数据的文件中除去重复行。在这种情况下,重复行几乎总是表示同一金额的另一个交易,将它除去会给会计部造成许多困难。千万别这么干!


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

如果您希望您的工作轻松点,比如只显示唯一的或重复的行,那么该怎么办呢?您可以用 -u (唯一)和 -d (重复)选项来做到这一点,例如:


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

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


				
        $ 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 选项。

有什么问题或意见吗?我非常乐意收到您的来信 - 请发送邮件到 。

下一次,我们将研究 nl 。到时候见!



  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 下载上面代码清单的示例文件 。



  • 请阅读本系列文章中的其它技巧文章:


  • 请在 (位于 MIT 的 ,在 MIT,您还可以找到 )中找到有关这些有用工具的更多信息。



  • Windows 用户可以在 软件包中找到这些工具。



  • Mac OS X 用户可能想尝试 ,它在新 Mac OS X 下安装了丰富的 UNIX 环境。



  • 遇到问题了?请尝试查阅 。



  • 在深入研究我们这里讲述的工具之前还需要更多介绍性的信息?您可以尝试从 入手。



  • 这一领域的经典著作当然是 O'Reilly and Associates 出版的 (Jerry Peek、Tim O'Reilly 和 Mike Loukides 1997;ISBN 1-56592-260-3)。



  • 迷上 UNIX 文本实用程序(以及 UNIX 本身)了吗?您会喜欢 Thomas Scoville 所著的经典文章 。



  • 一篇讨论 作为组件体系结构的 UNIX 实用程序developerWorks文章从不同观点研究了 UNIX。



  • 在下面这些 developerWorks教程: vi 入门 -- 巧表单方法生活在 Emacs 中中学习如何使用可用于 Linux 的最流行的两个文本编辑器。



  • developerWorksLinux 专区 中查找您正在寻找的 Linux 参考资料。
  • 于作者

    Jacek Artymiak 是一位自由顾问、开发人员和作家。自从 1991 年他就一直为许多商业性和免费的 UNIX 和 BSD 操作系统的变体(AIX、HP-UX、IRIX、Solaris、Linux、FreeBSD、NetBSD、OpenBSD 和其它操作系统)和 MS-DOS、Microsoft Windows、Mac OS 与 Mac OS X 等开发软件。Jacek 擅长商业和金融应用程序开发、Web 设计、网络安全、计算机图形、动画和多媒体。在技术主题方面,他是一位多产的作家,并与他人一同合著了“Install, Configure, and Customize Slackware Linux”(Prima Tech,2000)和“StarOffice for Linux Bible”(IDG Books,2000)。在 上可以找到许多 Jacek 的软件项目。可以从他的 更多地了解他,可以通过 与他联系。


阅读(513) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~