uniq 命令去重复行的使用方法 (转)

转:http://www.justwinit.cn/post/3671/

 

特别注意:
用uniq命令可以删除相邻的重复行:
uniq [file]
但如果一文本中有重复却不相邻的行则无法删除,需要结合sort命令: 
sort [file]|uniq
等效的sort命令是:
sort -u [file] 
=========================================
去重复后统计:

sort needsort.txt |uniq |wc


原来的行数:

sort needsort.txt |uniq |wc


重复行和重复多少次:

sort needsort.txt |uniq -c -d




单独行统计,就是只有一行没有重复的统计:

sort needsort.txt |uniq -u|wc



你也可以按照列来排序:
sort -k2nr 

sort如何按指定的列排序
0000            27189           41925425
065f            15              41925425
0663            7               41925425
0675            5               41925425
0691            76              41925425
0693            2               41925425
06a7            82              41925425
06a9            58              41925425
06bf            68              41925425
06c1            56              41925425
06d7            145             41925425
06e1            127             41925425
06e3            230             41925425
06e5            7               41925425
06ef            48              41925425
06f1            463             41925425
06ff            3847            41925425
070b            2376            41925425
070d            3408            41925425
0713            109025          41925425
0715            4               41925425
0726            134             41925425
我想按第二列值进行排序,从大到小的顺序。

sort -k2nr sorttest.txt


0713            109025          41925425
0000            27189           41925425
06ff            3847            41925425
070d            3408            41925425
070b            2376            41925425
06f1            463             41925425
06e3            230             41925425
06d7            145             41925425
0726            134             41925425
06e1            127             41925425
06a7            82              41925425
0691            76              41925425
06bf            68              41925425
06a9            58              41925425
06c1            56              41925425
06ef            48              41925425
065f            15              41925425
0663            7               41925425
06e5            7               41925425
0675            5               41925425
0715            4               41925425
0693            2               41925425

sort -k2nr


作者: Songs  出自: http://www.linuxdiyf.com
uniq命令的作用:显示唯一的行,对于那些连续重复的行只显示一次!
接下来通过实践实例说明:
[root@stu100 ~]# cat test
boy took bat home
boy took bat home
girl took bat home
dog brought hat home
dog brought hat home
dog brought hat home
看test文件的内容,可以看到其中的连续重复行
[root@stu100 ~]# uniq test
boy took bat home
girl took bat home
dog brought hat home
uniq命令不加任何参数,仅显示连续重复的行一次
[root@stu100 ~]# uniq -c test
2 boy took bat home
1 girl took bat home
3 dog brought hat home
-c 参数显示文件中每行连续出现的次数。
[root@stu100 ~]# uniq -d test
boy took bat home
dog brought hat home
-d选项仅显示文件中连续重复出现的行。
[root@stu100 ~]# uniq -u test
girl took bat home
-u选项显示文件中没有连续出现的行。
[root@stu100 ~]# uniq -f 2 -s 2 test
boy took bat home
忽略每行的前2个字段,忽略第二个空白字符和第三个字段的首字符,结果at home
[root@stu100 ~]# uniq -f 1 test
boy took bat home
dog brought hat home
忽略每行的第一个字段,这样boy ,girl开头的行看起来是连续重复的行。




uniq 命令
  文字
  uniq是LINUX命令
  用途
  报告或删除文件中重复的行。
  语法
  uniq [ -c | -d | -u ] [ -f Fields ] [ -s Characters ] [ -Fields ] [ +Characters ] [ InFile [ OutFile ] ]
  描述
  uniq 命令删除文件中的重复行。 uniq 命令读取由 InFile 参数指定的标准输入或文件。该命令首先比较相邻的行,然后除去第二行和该行的后续副本。重复的行一定相邻。(在发出 uniq 命令之前,请使用 sort 命令使所有重复行相邻。)最后,uniq 命令将最终单独的行写入标准输出或由 OutFile 参数指定的文件。InFile 和 OutFile 参数必须指定不同的文件。
  输入文件必须是文本文件。文本文件是包含组织在一行或多行中的字符的文件。这些行的长度不能超出 2048 个字节(包含所有换行字符),并且其中不能包含空字符。
  缺省情况下,uniq 命令比较所有行。如果指定了-f Fields 或 -Fields 标志, uniq 命令忽略由 Fields 变量指定的字段数目。 field 是一个字符串,用一个或多个 <空格 > 字符将它与其它字符串分隔开。如果指定了 -s Characters 或 -Characters 标志, uniq 命令忽略由 Characters 变量指定的字段数目。为 Fields 和 Characters 变量指定的值必须是正的十进制整数。
  当前本地语言环境决定了 -f 标志使用的 <空白> 字符以及 -s 标志如何将字节解释成字符。
  如果执行成功,uniq 命令退出,返回值 0。否则,命令退出返回值大于 0。
  标志
  -c 在输出行前面加上每行在输入文件中出现的次数。
  -d 仅显示重复行。
  -f Fields 忽略由 Fields 变量指定的字段数目。 如果 Fields 变量的值超过输入行中的字段数目, uniq 命令用空字符串进行比较。 这个标志和 -Fields 标志是等价的。
  -u 仅显示不重复的行。
  -s Characters 忽略由 Characters 变量指定的字符的数目。 如果 Characters 变量的值超过输入行中的字符的数目, uniq 用空字符串进行比较。 如果同时指定 -f 和 -s 标志, uniq 命令忽略由 -s Characters 标志指定的字符的数目,而从由 -f Fields 标志指定的字段后开始。 这个标志和 +Characters 标志是等价的。
  -Fields 忽略由 Fields 变量指定的字段数目。 这个标志和 -f Fields 标志是等价的。
  +Characters 忽略由 Characters 变量指定的字符的数目。 如果同时指定 - Fields 和 +Characters 标志, uniq 命令忽略由 +Characters 标志指定的字符数目,并从由 -Fields 标志指定的字段后开始。 这个标志和 -s Characters 标志是等价的。
  退出状态
  该命令返回以下退出值:
  0 命令运行成功。
  >0 发生错误。
  示例
  要删除名为 fruit 文件中的重复行并将其保存到一个名为 newfruit 的文件中,输入:
  uniq fruit newfruit
  如果 fruit 文件包含下列行:
  apples
  apples
  peaches
  pears
  bananas
  cherries
  cherries
  则在您运行uniq 命令后 newfruit 文件将包含下列行:
  apples
  peaches
  pears
  bananas
  cherries
  文件
  /usr/bin/uniq 包含 uniq 命令。

posted on 2012-07-05 20:39  奋斗者  阅读(4159)  评论(0编辑  收藏  举报

导航