J'ai un fichier csv où la colonne 1 est le nom d'un gène et la colonne 2 est une valeur associée à ce gène. Cependant, certains gènes ont des valeurs multiples et je veux additionner les valeurs de la colonne 2 si la colonne 1 est identique.
Donc, si par exemple j'avais un fichier test.csv
qui ressemblait à ceci:
eee,55
ddd,60
eee,5
aaa,70
aaa,50
ddd,100
fff,30
Je voudrais qu'il revienne:
eee,60
ddd,160
aaa,120
fff,30
J'ai essayé d'utiliser
awk 'BEGIN { FS = OFS = "," }
NR != 1 { y[$1] += $2; $2 = y[$1]; x[$1] = $0; }
END { for (i in x) { print x[i]; } }'
Mais le résultat que je reçois est
eee,5
fff,30
aaa,120
ddd,160
Pourquoi fonctionne-t-il pour toutes les valeurs sauf les eee?
Il semble que vous sautiez un en-tête CSV inexistant: NR != 1
. Sans ça:
$ 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
Vous auriez également pu en finir avec awk
.
awk -F, '{y[$1]+=$2}END{for (x in y) print x","y[x]}' in.txt