2番目の列で国別にグループ化し、結果の合計に基づいて並べ替えるにはどうすればよいですか?

2番目の列で国別にグループ化し、結果の合計に基づいて並べ替えるにはどうすればよいですか?

次のファイルがあります。

1   UA
2   GB
3   UA
3   UA
2   US
1   UA
4   US 

2番目の列にグループ化し、最初の列に合計を計算する方法は?したがって、出力は次のようになります。

8 UA  
6 US
2 GB

ベストアンサー1

そしてGNU awk

$ awk 'BEGIN{PROCINFO["sorted_in"] = "@val_num_desc"}
       {a[$2]+=$1} END{for(k in a) print a[k], k}' ip.txt
8 UA
6 US
2 GB

バラよりgawk マニュアル: 事前定義された配列スキャン順序の使用ソートオプションの詳細をご覧ください。


そしてperl

perl -lane '$h{$F[1]}+=$F[0]; END{print "$h{$_} $_" for
            sort {$h{$b} <=> $h{$a}} keys %h}' ip.txt

おすすめ記事