У меня есть файл CSV, где столбец 1 является названием гена, и столбец 2 является значением, связанным с тем геном. Однако некоторые гены имеют несколько значений, и я хочу суммировать значения столбца 2, если столбец 1 является тем же.
Так, если, например, у меня был некоторый файл 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's?
Похоже на пропуск несуществующего заголовка 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