|
如下文本:$ 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 表示的是数组的下标,而不是数组的值。 |
|