Com o comando datamash
do GNU
datamash groupby 2 sum 1 <infile.txt
Com o script Unix, gostaria de adicionar valores na coluna 1 se o texto na coluna 2 for o mesmo e imprimir a soma. Eu tenho um arquivo que é:
7 GeneA
2 GeneB
6 GeneC
2 GeneB
9 GeneA
Eu quero que a saída se pareça com:
16 GeneA
4 GeneB
6 GeneC
Obrigado
Com o comando datamash
do GNU
datamash groupby 2 sum 1 <infile.txt
Use o script awk :
awk '{ a[$2]+=$1 }END{ for(i in a) print a[i],i }' file
a[$2]+=$1
- acumulando valores para cada grupo ( "grupo" é considerado como valor único do 2º campo, usado como array a
index) A saída:
16 GeneA
4 GeneB
6 GeneC
Com as Ferramentas do Google Crush ' 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
Aqui está uma solução usando o Perl:
perl -aE '$F{$F[1]}+=$F[0];END {say "$F{$_} $_" for keys %F}' file
Tags text-processing