分类: LINUX
2013-04-17 15:49:45
uniq用法
u n i q用来从一个文本文件中去除或禁止重复行。一般u n i q假定文件已分类,并且结果正确。
我们并不强制要求这样做,如果愿意,可以使用任何非排序文本,甚至是无规律行。
可以认为u n i q有点像s o r t命令中唯一性选项。对,在某种程度上讲正是如此,但两者有一个重要区别。s o r t的唯一性选项去除所有重复行,而u n i q命令并不这样做。重复行是什么?在u n i q里意即持续不断重复出现的行,中间不夹杂任何其他文本,现举例如下:
CODE:
[sam@chenwy sam]$ cat
myfile.txt
May Day
May Day
May Day
Going DOwn
May Day
May Day.
May Day
u n i q将前三个May
Day看作重复副本,但是因为第4行有不同的文本,故并不认为第五行持续的May Day为其副本。u n i q将保留这一行。
命令一般格式:
CODE:
$uniq -u d c -f
input-file out-file
QUOTE:
其选项含义:
-u 只显示不重复行。
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数。
-f n为数字,前n个域被忽略。
一些系统不识别- f选项,这时替代使用- n。
创建文件m y f i l e . t x t,在此文件上运行u n i q命令。
CODE:
[sam@chenwy sam]$
uniq myfile.txt
May Day
Going DOwn
May Day
May Day.
May Day
注意第5行保留下来,其文本为最后一行May Day。如果运行sort -u,将只返回May Day和Going Down。
连续重复出现
使用- c选项显示行数,即每个重复行数目。本例中,行May
Day重复出现三次
CODE:
[sam@chenwy sam]$
uniq -c myfile.txt
3 May Day
1 Going DOwn
1 May Day
1 May Day.
1 May Day
1. 不唯一
使用- d显示重复出现的不唯一行:
CODE:
[sam@chenwy sam]$
uniq -d myfile.txt
May Day
CODE:
[sam@chenwy sam]$
uniq -u myfile.txt
Going DOwn
May Day
May Day.
2. 对特定域进行测试
使用- n只测试一行一部分的唯一性。例如- 5意即测试第5域后各域唯一性。域从1开始记数。
如果忽略第1域,只测试第2域唯一性,使用- n2,下述文件包含一组数据,其中第2域代表组代码。
CODE:
[sam@chenwy sam]$ cat
parts.txt
AK123 OPP Y13
DK122 OPP Y24
EK999 OPP M2
CODE:
[sam@chenwy sam]$ cat
parts.txt
AK123 33 46 6u OPP ty yu
DK122 5h 67 y8 OPP ty yu
EK999 56 56 78 IIY ty yu
运行u n i q,将返回所有行。因为这个文件每一行都不同。
CODE:
[sam@chenwy sam]$ cat
parts.txt
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域后,结果就会不同。u n i q会比较三个相同的O PP,因此将返回一行。
CODE:
[sam@chenwy sam]$
uniq -f4 -c parts.txt
2 AK123 33 46 6u OPP ty yu
1 EK999 56 56 78 IIY ty yu
指定第5域,即从第6域开始比较:
CODE:
[sam@chenwy sam]$
uniq -f5 -c parts.txt
3 AK123 33 46 6u OPP ty yu
如果‘- f’返回错误,替代-n使用: