使用 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