I have text file with entries like 123 112 3333 44 2
How to add these numbers and get the sum of these.
I have text file with entries like 123 112 3333 44 2
How to add these numbers and get the sum of these.
Example:
$ cat numbers.txt
123 112 3333 44 2
$ SUM=0; for i in `cat numbers.txt`; do SUM=$(($SUM + $i)); done; echo $SUM
3614
See also: Bash Programming Introduction, section on arithmetic evaluation
If you don't absolutely need to use bash
strings, use the command line utilities sed
and bc
:
sed numbers.txt -e 's/ /+/g' | bc
For multiple spaces:
sed numbers.txt -e 's/[[:space:]]\+/+/g' | bc
A Bash-only (no cat
) variation on MYYN's answer.
sum=0; for i in $(<number_file); do ((sum += i)); done; echo $sum
Also, note the simpler arithmetic statement.
Alternatively in Awk
echo "123 112 3333 44 2" | awk 'BEGIN {sum=0} {for(i=1; i<=NF; i++) sum+=$i } END {print sum}'
Or if it's in a file
cat file.txt | awk 'BEGIN {sum=0} {for(i=1; i<=NF; i++) sum+=$i } END {print sum}'
I find Awk much easier to read/remember. Although "Dave Jarvis" solution is particular neat!
just one awk command does it. It doesn't break when you have decimals to add as well.
awk '{for(i=1;i<=NF;i++)s+=$i}END{print s}' file