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