我的输入看起来像
5 X
8 Y
3 Z
9 X
我想要输出对每个'标签'的数值求和; e.g。
14 X
8 Y
3 Z
想知道是否有一个光滑的衬垫我可以使用(沿着那些用于使用awk对整数列表求和的行)。
答案 0 :(得分:7)
这样的事情可以解决问题:
perl -ne '$table{$2} += $1 if /(\d+)\s+(.+)/; END {print "$table{$_} $_\n" for keys %table}'
或使用自动分割:
perl -ane '$table{$F[1] or next} += $F[0]; END {print "$table{$_} $_\n" for keys %table}'
答案 1 :(得分:0)
像我一样光滑:
perl -alne 'END{print"$X{$_} $_"for sort{$X{$b}<=>$X{$a}}keys%X}$X{$F[1]}+=$F[0]'
答案 2 :(得分:0)
试图让它尽可能少混淆:) 按'标签'排序输出。
perl -alne '$counts{$F[1]} += $F[0]; END { print "$counts{$_} $_" for sort(keys %counts) }'
答案 3 :(得分:0)
以随机顺序输出
perl -alne'$t{$F[1]}+=$F[0]}{print"$t{$_} $_"for keys%t'
按标签按字母顺序排序
perl -alne'$t{$F[1]}+=$F[0]}{print"$t{$_} $_"for sort keys%t'
按值排序
perl -alne'$t{$F[1]}+=$F[0]}{print"$t{$_} $_"for sort{$t{$b}<=>$t{$a}}keys%t'
答案 4 :(得分:0)
gawk "{count[$2]+=$1}END{for(i in count)print count[i],i}" 1.t