2013-12-06 7 views
0

У меня есть многострочный вывод из некоторых сценариев оболочки, одно целое число на строку. Например:Как суммировать многострочный вывод чисел?

12 
11 
55 
337 
11 
34 

Проблема в том, как я могу суммировать эти числа с помощью команды оболочки? Я попытался sum, но он не делает то, что предназначено:

<some_shell_scripts> |sum 
36373  2 

Любое простое решение в KSH или баш?

ответ

2

трубы, что AWK:

<some_shell_scripts> | awk 'NF{sum+=$1} END {print sum}' 
4

С awk вы можете сделать это с чем-то вроде этой линии:

$ awk '{count+=$1} END{print count}' file 
460 

С bash:

sum=0 
while read number 
do 
    sum=$(($sum + $number)) 
done < file 
echo $sum 

Тест:

$ sum=0; while read number; do sum=$(($sum + $number)); done < file 
$ echo $sum 
460 
0

Использовать bc для расчета командной строки, awk является излишним.

Например:

echo "23 + 23 + 23" | bc 
69 
1

Заменить все '\ п' с '+' по СЕПГ и затем Ьс

<some_shell_scripts> | sed ':a;N;$!ba;s/\n/+/g' | bc 
+0

Что делает первое СЕПГ выражение означает? –

+1

@QiangXu http://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n –

+0

Вот что я получил: 'sed: 0602-417 Метка: a; N; $! ba; s/\ n/+/g больше восьми символов –

Смежные вопросы