Soma coluna 2 do arquivo .csv se a coluna 1 for a mesma

2

Eu tenho um arquivo csv onde a coluna 1 é o nome de um gene e a coluna 2 é um valor associado a esse gene. No entanto, alguns genes têm vários valores e quero somar os valores da coluna 2 se a coluna 1 for a mesma.

Então, por exemplo, se eu tivesse algum arquivo test.csv que se parecesse com isso:

eee,55
ddd,60
eee,5
aaa,70
aaa,50
ddd,100
fff,30

Eu gostaria que voltasse:

eee,60
ddd,160
aaa,120
fff,30

Eu tentei usar

awk 'BEGIN { FS = OFS = "," }
        NR != 1 { y[$1] += $2; $2 = y[$1]; x[$1] = $0; }
        END { for (i in x) { print x[i]; } }'

Mas a saída que estou recebendo é

eee,5
fff,30
aaa,120
ddd,160

Por que está funcionando para todos os valores, exceto os eee's?

    
por Louis 10.08.2017 / 16:25

2 respostas

1

Parece que você está pulando um cabeçalho CSV inexistente: NR != 1 . Sem isso:

$ awk 'BEGIN { FS = OFS = "," }
        { y[$1] += $2; $2 = y[$1]; x[$1] = $0; }
        END { for (i in x) { print x[i]; } }' foo
aaa,120
eee,60
ddd,160
fff,30
    
por muru 10.08.2017 / 17:19
0

Você também pode ter feito abaixo de awk .

awk -F, '{y[$1]+=$2}END{for (x in y) print x","y[x]}' in.txt
    
por αғsнιη 10.08.2017 / 18:27