LINUX.ORG.RU

Суммирование в bash

 ,


1

1

Всем привет, помогите решить одну проблему, есть вот такой цикл:

cat test.sh | while read item; do 
      echo $item 
done

На выводе

6
32
13
2
11
5
10
12
5
26

как мне в цикле можно суммировать все значения, что бы на выводе выдало их суму.

Ответ на: комментарий от maison999

А подумать?

sum=0
while read n; do
    sum=$(( $sum + n ))
done <numbers
echo $sum

Deleted
()

Смеха ради: jconsole -js "exit echo +/ x: 0\". > cutLF stdin''", можно еще c dc изголиться.

А по сабжу - awk '{a += $1} END {print a}' или ruby -e 'p $<.lines.map(&:to_i).reduce(:+)'.

anonymous
()
Ответ на: комментарий от maison999

ну не знаю, УМВР:

$ SUM=0; for I in 6 32 13 2 11 5 10 12 5 26; do echo $I; let SUM+=$I; done; echo "sum=$SUM"
6
32
13
2
11
5
10
12
5
26
sum=122
$

anonymous
()
Ответ на: комментарий от anonymous

ps: не проверял

а стоило, fail

TC-у, чинится так: либо «done < <(...)» (заместо ... | перед while) либо «shopt -s lastpipe».

anonymous
()
Ответ на: комментарий от anonymous

Кривая проверка «| ...» - подпроцесс, переменные внутри него не видны родительскому без костылей.

anonymous
()
Ответ на: комментарий от anonymous

черт! :)
после «do» лишняя клякса в виде точки
mc — падла...

anonymous
()
Ответ на: комментарий от kovrik

xargs | tr ' ' '+'

К такому вбросу нужно добавлять, что на большом входе возможны несколько строк с суммами.

anonymous
()
cat test.sh | while read item; do
    sum=$((sum + item))
    echo "item = $item ; sum = $sum"
done
Bagrov ★★★★★
()
Последнее исправление: Bagrov (всего исправлений: 2)

Мда, ЛОР уже даже с удалёнными не торт.

aedeph_ ★★
()
Ответ на: -20 от edigaryev

Такие вопросы не нужно гуглить, нужно просто знать средства используемых инструментов.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.