Somando valores se o mesmo valor da segunda coluna

3

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

    
por Meghan 20.09.2017 / 16:17

4 respostas

6

Com o comando datamash do GNU

datamash groupby 2 sum 1 <infile.txt 
    
por 20.09.2017 / 16:45
5

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
    
por 20.09.2017 / 16:20
1

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 
    
por 20.09.2017 / 20:53
1

Aqui está uma solução usando o Perl:

perl -aE '$F{$F[1]}+=$F[0];END {say "$F{$_} $_" for keys %F}' file 
    
por 20.09.2017 / 22:00