![Суммировать все строки CSV-файла](https://rvso.com/image/1552391/%D0%A1%D1%83%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B2%D1%81%D0%B5%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20CSV-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0.png)
У меня есть 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