根据第一个逗号之前的匹配查找重复行数

根据第一个逗号之前的匹配查找重复行数

如何根据以下数据中第一个逗号之前的数字查找重复行?

输入:

112112112,00,00,00
110110,01,01,02
112112112,11,11,888
110110,99,88,8
410410,22,22,22

输出:

112112112 (2)
110110    (2)

答案1

虽然你可以修改钢铁司机的解决方案对于您之前的类似问题,这里有一个快速而肮脏的管道:

cut -d, -f1 < input | sort | uniq -c | awk '$1 > 1 { print $2, "(" $1 ")" }'

答案2

与单awk

awk -F, '{ a[$1]++ }END{ for(i in a) if(a[i]>1) printf "%-12s(%d)\n",i,a[i] }' file

输出:

110110      (2)
112112112   (2)

答案3

将您的输入文件通过管道传输到以下内容应该可以做到:

cut -f1 -d, | sort | uniq -cd

输出与您发布的不完全相同;重复计数是第一列,而不是最后一列并带括号:

  2 110110
  2 112112112

调用要求cut隔离第一个逗号分隔字段,sort确保相同的字段按顺序排列,这是对uniq这些字段进行分组所必需的;-c要求计数并-d仅显示重复项。对整个输入进行排序可能不是实现您所要求的最有效的方法,但只有当您的输入变得非常大时,这才应该成为一个问题。

相关内容