列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以外のすべての値で機能するのはなぜですか?
存在しない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
以下のawk
でもできます。
awk -F, '{y[$1]+=$2}END{for (x in y) print x","y[x]}' in.txt