从 CSV 文件打印重复值,包括出现次数

从 CSV 文件打印重复值,包括出现次数

输入示例是

John,Yes,123
Tom,No,345
Jason,Yes,567
Thomas,No,123
Jess,No,999
James,Yes,888
Lisa,No,345
Lou,Yes,777
Peter,No,123

我想打印第三列中值的出现次数,但仅打印出现次数超过 1 次的值。因此,对于上面的示例,所需的输出将是:

3 123
2 345

我们如何用sed/awk或类似的东西做到这一点?

答案1

cut -f3 -d, "$file" | sort | uniq -cd | sed 's/  *//'
  • cut使用逗号作为分隔符,仅输出第三个字段
  • sort对行进行排序以便uniq可以使用
  • uniq -c计算有多少个连续的重复行,-d使其仅输出重复项(即省略唯一值)
  • 最后一个sed删除了前导空格。

答案2

一行awk

awk -F',' '{c[$3]++} END{for (i in c) {if (c[i]>1) print c[i],i}}' input.csv
  • 这指示awk用作,字段分隔符。
  • 对于每一行,它都会为第三个字段 ( ) 的值增加一个计数器$3
  • 最后,它将迭代计数器数组c( for (i in c)) 中注册的所有“索引”,如果与该索引关联的“条目”大于 1,则打印出现次数和第三列的相应值。

如果您想更好地控制输出格式,您可能需要使用printf而不是print在块中END

相关内容