曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3672|回复: 0
打印 上一主题 下一主题

统计重复行

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2013-1-19 00:20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下文本:
$ cat tmp.txt
1111
2222
3333
4444
1111
8888
3333
9999
希望能够对重复的行进行统计。

首先,不能希望只用 uniq 命令作用域 tmp.txt 文件,这不会找出重复的行,因为 uniq 只能处理相邻的重复行。因此,如果想列出重复行,需要先 sort 之后再用 uniq ,如:
$ sort tmp.txt |uniq -d
1111
3333
其中,uniq 的 -d 参数要求去掉非重复的行,而只列出重复的行。如果希望得到重复行的重复数,那么使用 uniq 的 -c 选项:
$ sort tmp.txt |uniq -c -d
      2 1111
      2 3333

此外,还可以使用 awk 命令进行统计,这里使用了数组的方法:
$ cat tmp.txt |awk '{a[$0]++} END {for(i in a) print a, i}'
2 3333
1 2222
1 9999
2 1111
1 4444
1 8888
或者写成:awk '{a[$0]++} END {for(i in a) print a, i}' tmp.txt
在 awk 命令中,由于 tmp.txt 中只有 1 列内容,$0 即代表了该列。awk 对 tmp.txt 中的内容逐行扫描,a[] 这个数组的下标是每行的内容,比如有 a[3333], a[9999] ,这样的数组是关联性数组。在最后的 END 部分的 (i in a) 中的 i 表示的是数组的下标,而不是数组的值。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-15 18:40 , Processed in 0.076206 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表