JohnJ
JohnJ

Reputation: 7056

loop through numeric text files in bash and add numbers row wise

I have a set of text files in a folder, like so:

a.txt
1
2
3
4
5

b.txt
1000
1001
1002
1003
1004

.. and so on (assume fixed number of rows, but unknown number of text files). What I am looking a results file which is a summation across all rows:

result.txt
1001
1003
1005
1007
1009

How do I go about achieving this in bash? without using Python etc.

Upvotes: 2

Views: 68

Answers (1)

John1024
John1024

Reputation: 113814

Using awk

Try:

$ awk '{a[FNR]+=$0} END{for(i=1;i<=FNR;i++)print a[i]}' *.txt
1001
1003
1005
1007
1009

How it works:

  • a[FNR]+=$0

    For every line read, we add the value of that line, $0, to partial sum, a[FNR], where a is an array and FNR is the line number in the current file.

  • END{for(i=1;i<=FNR;i++)print a[i]}

    After all the files have been read in, this prints out the sum for each line number.

Using paste and bc

$ paste -d+ *.txt | bc
1001
1003
1005
1007
1009

Upvotes: 4

Related Questions