BASH: Menjumlahkan baris angka dalam sebuah file

Berikut sedikit tips untuk menjumlahkan sejumlah angka yang ada dalam sebuah file.

Misal kita mempunyai file dengan nama /tmp/file.txt

$ cat /tmp/file.txt
286
255564800
609
146
671290

Berikut beberapa cara untuk menjumlahkannya

Cara 1 (menggunakan perintah awk) :

$ awk '{s+=$0} END {print s}' /tmp/file.txt
256237131

 

Cara 2 (menggunakan perintah paste dan bc) :

$ paste -sd+ /tmp/file.txt
286+255564800+609+146+671290
$ paste -sd+ /tmp/file.txt | bc
256237131

 

Cara 3 (menggunakan perintah tr dan bc) :

$ tr -s '\n' '+' < /tmp/file.txt
286+255564800+609+146+671290+
$ echo $(tr -s '\n' '+' < /tmp/file.txt)
286+255564800+609+146+671290+

karena ada tambahan + pada akhir output di atas , maka ditambahkan angka 0 pada output

$ echo $(tr -s '\n' '+' < /tmp/file.txt)0
286+255564800+609+146+671290+0
$ echo $(tr -s '\n' '+' < /tmp/file.txt)0 | bc
256237131

 

Cara 4 :

$ printf "%d\n" $(( $(tr -s '\n' '+' < /tmp/file.txt) 0 ))
256237131

 

Cara 5 (menggunakan sed dan bc) :

$ sed 's/$/+/' /tmp/file.txt
286+
255564800+
609+
146+
671290+
$ echo $(sed 's/$/+/' /tmp/file.txt) 0
286+ 255564800+ 609+ 146+ 671290+ 0
$ echo $(sed 's/$/+/' /tmp/file.txt) 0 | bc
256237131

 

Cara 6 (menggunakan bash script dengan loop):

sum=0
for num in $(cat /tmp/file.txt)
    do
        ((sum+=num))
done
echo $sum