曲径通幽论坛

标题: 统计重复行 [打印本页]

作者: beyes    时间: 2013-1-19 00:20
标题: 统计重复行
如下文本:
$ 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 表示的是数组的下标,而不是数组的值。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2