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
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?
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
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