У меня есть текстовый файл с записями как 123 112 3333 44 2
Как добавить эти числа и получить сумму их.
Пример:
$ cat numbers.txt
123 112 3333 44 2
$ SUM=0; for i in `cat numbers.txt`; do SUM=$(($SUM + $i)); done; echo $SUM
3614
См. Также: Введение в программирование на Bash, раздел по арифметическому вычислению
Другой способ - использовать bc
, язык калькулятора произвольной точности:
$ echo '123 112 3333 44 2' | tr ' ' '\n' | paste -sd+ | bc
3614
Вставка обычно работает со строками, поэтому нам понадобится tr
.
Вариант ответа MYYN только для Bash (без cat
).
sum=0; for i in $(<number_file); do ((sum += i)); done; echo $sum
Также обратите внимание на более простое арифметическое утверждение.
Это делает всего одна команда awk. Он не ломается, когда вам нужно добавить десятичные дроби.
awk '{for(i=1;i<=NF;i++)s+=$i}END{print s}' file
Альтернативно в Awk
echo "123 112 3333 44 2" | awk 'BEGIN {sum=0} {for(i=1; i<=NF; i++) sum+=$i } END {print sum}'
Или, если он находится в файле
cat file.txt | awk 'BEGIN {sum=0} {for(i=1; i<=NF; i++) sum+=$i } END {print sum}'
, я считаю, что Awk намного легче читать / запоминать. Хотя решение «Дэйва Джарвиса» особенно изящное!