2番目の列の値が等しい場合、値を合計

2番目の列の値が等しい場合、値を合計

Unixスクリプトを使用して、列2のテキストが同じ場合は、列1の値を加算して合計を印刷しようとします。次のファイルがあります。

7 GeneA
2 GeneB
6 GeneC
2 GeneB
9 GeneA

出力が次のようになります。

16 GeneA
4  GeneB
6  GeneC

ありがとう

答え1

使用アッスクリプト:

awk '{ a[$2]+=$1 }END{ for(i in a) print a[i],i }' file
  • a[$2]+=$1- 各グループの価値を累積する(「グループ」2番目のフィールドの固有値と見なされ、配列aインデックスとして使用されます)

出力:

16 GeneA
4 GeneB
6 GeneC

答え2

GNUと共にdatamash 注文する。

datamash groupby 2 sum 1 <infile.txt 

答え3

Perlを使った解決策は次のとおりです。

perl -aE '$F{$F[1]}+=$F[0];END {say "$F{$_} $_" for keys %F}' file 

答え4

そしてGoogleスマッシュツール' subtotal:

$ sort --key 2 yourFile.txt | subtotal --key 2 --sum 1 --delim ' '

7 GeneA
9 GeneA
16 

2 GeneB
2 GeneB
4 

6 GeneC
6 

関連情報