Суммировать все строки CSV-файла

Суммировать все строки CSV-файла

У меня есть CSV-файл с некоторыми числами. Я хочу получить новый файл с тем же количеством строк и одним столбцом, содержащий сумму чисел соответствующей строки в исходном CSV-файле.

Пример ввода(обратите внимание на пробелы, надеюсь, это не будет проблемой)

 2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
 3,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
 4,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
 5,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
 6,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0

Ожидаемый результат

2
4
5
6
7

Мой код(не выводится никаких данных):

    file_out="output.txt"
    file_in="input.txt"
    cmd3="sum_file=\$(awk -F, '
    {
        sum = 0; 
        for (i=1; i<=NF; i++) {
            sum += \$i;
        }
        print sum;
    }
    ' ${file_in})"
    echo $cmd3
    eval $cmd3
    eval "echo ${sum_file} > ${file_out}"

Вы можете предложить и другие инструменты, отличные от awk, но мне было бы приятно узнать, почему мой код не работает, может быть, из-за пробелов (я так не думаю).

решение1

Вам не нужны никакие временные значения. Просто выполните awkи перенаправьте вывод в файл.

file_out="output.txt"
file_in="input.txt"
awk -F, '
{
    sum = 0; 
    for (i=1; i<=NF; i++) {
        sum += \$i;
    }
    print sum;
}
' "${file_in}" > "${file_out}"

решение2

awk:

awk -F, '{sum=0; for (i=1; i<=NF; i++) {sum+= $i} print sum}' input.txt > output.txt

perl:

perl -F, -lane '$s=0; $s+=$_ for @F; print $s' input.txt > output.txt

Связанный контент