根据匹配重复条件查找重复行数

根据匹配重复条件查找重复行数

基本上我在 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)

相关内容