web-dev-qa-db-fra.com

Somme la colonne 2 du fichier .csv si la colonne 1 est identique

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?

2
Louis

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
1
muru

Vous auriez également pu en finir avec awk.

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