Сумма источника текста, разделенного пробелами
Как получить сумму каждого столбца из файла, например:
123 32 122
43 11 0
444 112 32
и дать результат как:
610 155 154
в простой команде?
Это должно быть легко в Perl, но я хотел бы знать, если кто-то уже упаковал его в репозиторий юниверсов или где-то еще, наряду с другими утилитами для работы с текстовыми таблицами.
3 ответа
Решение
Это должно сделать трюк:
cat foo | awk '{ SUM += $1; SUM1 += $2; SUM3 += $3} END { print SUM, SUM1, SUM3 }'
awk хорош для таких задач
awk '{for (i=1; i<=NF; ++i) sum[i]+=$i} END {for (i=1; i<=NF; ++i) printf "%3d ", sum[i]; printf "\n"}' filename
В питоне:
reduce(lambda x, y: \
map(lambda pair: pair[0] + pair[1], zip(x, y)), \
[map(int, n.split()) for n in file("foo", "r").read().splitlines()])
где количество столбцов и размер целого числа ограничены доступной памятью.