背景:如一个IP列表,需要找出这个列表里的重复行重复了多少次,怎么弄?Linux下sort和uniq功能很强大,如按某列排序,如删除重复行,进行统计重复,还可以有更多的功能在:http://jackxiang.com/post/3508/。
不统计台数只去重,用这个:
如果要查出大于两次的统计,这个一次的出不来,容易漏掉,所以还是用上面这个:
uniq [file]
但如果一文本中有重复却不相邻的行则无法删除,需要结合sort命令:
sort [file]|uniq
等效的sort命令是:
sort -u [file]
=========================================
去重复后统计:
原来的行数:
重复行和重复多少次:
单独行统计,就是只有一行没有重复的统计:
你也可以按照列来排序:
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
我想按第二列值进行排序,从大到小的顺序。
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
作者: 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 命令。
不统计台数只去重,用这个:
如果要查出大于两次的统计,这个一次的出不来,容易漏掉,所以还是用上面这个:
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 命令。
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3671/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2016-7-1 10:07
评论列表