Заранее извиняюсь за удобочитаемость обратных галочек ("` "), но они работают в оболочках, отличных от bash, и, следовательно, более удобны для вставки. Если вы используете оболочку, которая принимает его, формат $ (command ...) будет гораздо более читабельным (и, следовательно, отлаживаемым), чем `command ...`, поэтому не стесняйтесь изменять для вашего здравого смысла.
В моем bashrc есть простая функция, которая будет использовать awk для вычисления количества простых математических элементов
calc(){
awk 'BEGIN{print '"$@"' }'
}
Это будет делать +, -, *, /, ^,%, sqrt, sin, cos, круглые скобки .... (и многое другое в зависимости от вашей версии awk) ... вы можете даже получить фантазию с printf и отформатировать вывод с плавающей точкой, но это все, что мне обычно нужно
для этого конкретного вопроса, я бы просто сделал это для каждой строки:
calc `echo "$@"|tr " " "+"`
поэтому блок кода для суммирования каждой строки будет выглядеть примерно так:
while read LINE || [ "$LINE" ]; do
calc `echo "$LINE"|tr " " "+"` #you may want to filter out some lines with a case statement here
done
Это если вы хотите суммировать их только построчно. Однако в общей сложности каждое число в файле данных
VARS=`<datafile`
calc `echo ${VARS// /+}`
Кстати, если мне нужно что-то сделать быстро на рабочем столе, я использую это:
xcalc() {
A=`calc "$@"`
A=`Xdialog --stdout --inputbox "Simple calculator" 0 0 $A`
[ $A ] && xcalc $A
}