May Day
May Day
May Day
Going DOwn
May Day
May Day.
May Day
uniq将前三个May Day看作重复副本,但是因为第4行有不同的文本,故并不认为第五行持续的May Day为其副本。uniq将保留这一行。
$uniq -u d c -f input-file out-file
-u 只显示不重复行。
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数。
-f n为数字,前n个域被忽略。
一些系统不识别- f选项,这时替代使用- n。
创建文件m y f i l e . t x t,在此文件上运行uniq命令。
May Day
Going DOwn
May Day
May Day.
May Day
注意第5行保留下来,其文本为最后一行May Day。如果运行sort -u,将只返回May Day和Going Down。
使用- c选项显示行数,即每个重复行数目。本例中,行May Day重复出现三次
3 May Day
1 Going DOwn
1 May Day
1 May Day.
1 May Day
使用- d显示重复出现的不唯一行:
May Day
Going DOwn
May Day
May Day.
使用- n只测试一行一部分的唯一性。例如- 5意即测试第5域后各域唯一性。域从1开始记数。
如果忽略第1域,只测试第2域唯一性,使用- n2,下述文件包含一组数据,其中第2域代表组代码。
AK123 OPP Y13
DK122 OPP Y24
EK999 OPP M2
AK123 33 46 6u OPP ty yu
DK122 5h 67 y8 OPP ty yu
EK999 56 56 78 IIY ty yu
运行uniq,将返回所有行。因为这个文件每一行都不同。
1 AK123 33 46 6u OPP ty yu
1 DK122 5h 67 y8 OPP ty yu
1 EK999 56 56 78 IIY ty yu
如果指定测试在第4域后,结果就会不同。uniq会比较三个相同的O PP,因此将返回一行。
2 AK123 33 46 6u OPP ty yu
1 EK999 56 56 78 IIY ty yu
指定第5域,即从第6域开始比较:
3 AK123 33 46 6u OPP ty yu
如果‘- f’返回错误,替代-n使用.
$ sort happybirthday.txt
$ sort happybirthday.txt | uniq
警告:请不要使用 uniq 或任何其它工具从包含财务或其它重要数据的文件中除去重复行。在这种情况下,重复行几乎总是表示同一金额的另一个交易,将它除去会给会计部造成许多困难。千万别这么干!
本系列文章介绍了文本实用程序,它对在手册页和信息页找到的信息作了补充。如果您打开新的终端窗口并输入 man uniq 或 info uniq,或者打开新的浏览器窗口并查看位于 gnu.org 的 uniq 手册页,那么就可以了解更多的相关信息。
您还可以用 -c 选项从 uniq 中获取一些统计信息:
就算 uniq 对完整的行进行比较,它仍然会很有用,但是那并非该命令的全部功能。特别方便的是:使用 -f 选项,后面跟着要跳过的字段数,它能够跳过给定数目的字段。当您查看系统日志时这非常有用。通常,某些项要被复制许多次,这使得查看日志很难。使用简单的 uniq 无法完成任务,因为每一项都以不同的时间戳记开头。但是如果您告诉它跳过所有的时间字段,您的日志一下子就会变得更加便于管理。试一试 uniq -f 3 /var/log/messages,亲眼看看。