Linux bash分组

时间:2014-06-03 23:30:18

标签: bash awk sed

我有这个文件:

count,name
1,B1
1,B1
1,B3
1,B3
1,B2
1,B2
1,B2

我经常需要在每组总数上获得计数器。第一个数字总是一个。唯一重要的是小组。我写了一个java程序来为我做。输出将是

B1: 2
B2: 3
B3: 2

格式并不重要,只是每组名称的计数器。

我想知道,这可以用bash完成吗? AWK? SED?

2 个答案:

答案 0 :(得分:4)

嗯,使用sortuniq解决这个问题非常简单:

$ sort file | uniq -c
  2 1,B1
  3 1,B2
  2 1,B3

然后,如果您需要正确的格式,可以使用cut去除第一列,并使用awk打印结果:

$ cut -d ',' -f 2 file | sort | uniq -c | awk '{printf "%s: %d\n", $2, $1}'
  B1: 2
  B2: 3
  B3: 2

答案 1 :(得分:1)

使用awk,我会写

awk -F, 'NR>1 {n[$2]++} END {OFS=":";for (x in n) print x, n[x]}' file

假设您在文件中确实有一个标题行。