![根据匹配重复条件查找重复行数](https://linux22.com/image/121888/%E6%A0%B9%E6%8D%AE%E5%8C%B9%E9%85%8D%E9%87%8D%E5%A4%8D%E6%9D%A1%E4%BB%B6%E6%9F%A5%E6%89%BE%E9%87%8D%E5%A4%8D%E8%A1%8C%E6%95%B0.png)
基本上我在 Linux 服务器上有一个很大的文本文件,我想仅根据前 6 位数字来计算条目的重复项:
输入:
1111110000000222982
112114
1111119292828
11101110
112114
输出:
111111 (2)
112114 (2)
处理这种情况的最佳解决方案是什么?
答案1
通过一些uniq
实现,您可以执行以下操作:
$ <file cut -c-6 | sort | uniq -cd
2 111111
2 112114
并非所有实现都支持组合-c
(计数)与-d
(仅输出重复项)。
对于那些没有的,您可以使用uniq -c
并通过管道传输到awk '$1 > 1'
,或者做所有事情awk
这将节省你的排序(但如果有很多唯一的字符串,则可能会使用大量内存(尽管这里最多只有 100 万个不同的 6 个字符的字符串,这并不是很多))
答案2
awk '
{a[substr($0,1,6)]++}
END {for (i in a) {if (a[i] > 1) printf "%s (%d)\n", i, a[i]}}
' file
111111 (2)
112114 (2)