Как получить общую сумму всех значений фрейма данных с помощью awk - PullRequest
1 голос
/ 06 мая 2020

Предположим, у меня есть фрейм данных, например:

A,B,C,D
2,1,1,1
2,3,1,4

Я хочу получить общую сумму фрейма данных, то есть только общее значение в качестве вывода. Итак, для данного примера вывод должен быть 15

Я пробовал это, но он дает сумму для каждого столбца:

awk -F"," 'BEGIN {sum=0; OFS=","} {for (i=1; i<=NF; i++) a[i]+=$i } END {for (i in a) print a[i]}' file

Ответы [ 3 ]

2 голосов
/ 06 мая 2020

не могли бы вы попробовать следующее.

awk 'BEGIN{FS=","} FNR>1{for(i=1;i<=NF;i++){sum+=$i}} END{print sum}'  Input_file

Что не работает в подходе OP: OP logi c правильно, но мы не хотим чтобы использовать здесь массив, нам нужна простая переменная, в которой есть вся сумма, тогда в блоке кода END нам нужно ее распечатать.

1 голос
/ 06 мая 2020

Другой подход с GNU awk. Это преобразует файл в один столбец и суммирует его.

awk '{s+=$0} END{print s}' RS='[,\n]' file

Вывод:

15

См .: 8 мощных встроенных переменных Awk - FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

1 голос
/ 06 мая 2020

Другой подход: -)

awk -F',' 'NR>1{s=s FS$0}END{gsub(FS,"+",s);print "0"s}' file|bc

получил 15

...