如果第二列值相同,则对值求和

如果第二列值相同,则对值求和

使用 Unix 脚本,如果第 2 列中的文本相同,我想在第 1 列中添加值并打印总和。我有一个文件是:

7 GeneA
2 GeneB
6 GeneC
2 GeneB
9 GeneA

我希望输出看起来像:

16 GeneA
4  GeneB
6  GeneC

谢谢

答案1

使用awk脚本:

awk '{ a[$2]+=$1 }END{ for(i in a) print a[i],i }' file
  • a[$2]+=$1- 累积每组的值(“团体”被认为是第二个字段的唯一值,用作数组a索引)

输出:

16 GeneA
4 GeneB
6 GeneC

答案2

与GNUdatamash 命令。

datamash groupby 2 sum 1 <infile.txt 

答案3

这是使用 Perl 的解决方案:

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

答案4

谷歌粉碎工具' 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 

相关内容