web-dev-qa-db-ja.com

列1が同じ場合、.csvファイルの列2を合計します

列1が遺伝子の名前で、列2がその遺伝子に関連付けられた値であるcsvファイルがあります。ただし、一部の遺伝子には複数の値があり、列1が同じ場合は列2の値を合計します。

そのため、たとえば次のようなファイルtest.csvがあった場合:

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

返してほしい:

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

使ってみた

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

しかし、私が得ている出力は

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

Eee以外のすべての値で機能するのはなぜですか?

2
Louis

存在しないCSVヘッダーをスキップしているようです:NR != 1。それなしで:

$ 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

以下のawkでもできます。

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