Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

awk sum multiple columns

Tags:

awk

How can I calculate the SUM for all the individual columns (115 Columns)?

Input.txt

1st,2nd,3rd,4th,5th,Till-115thColumn
51,34,27,67,88,99
56,39,32,72,93,104
66,49,42,82,103,114

Output.txt

1st,2nd,3rd,4th,5th,Till-115thColumn
173,122,101,221,284,317

I tried this command:

awk -F"," 'BEGIN {sum=0; OFS=","} {for (i=1 i<=NF; i++) a[i]+=$i } END {for (i in a) print a[i]}' Input.txt

but I am not getting the required output.

like image 304
VNA Avatar asked Dec 08 '22 09:12

VNA


2 Answers

This can be a way:

awk 'BEGIN{FS=OFS=","}
     NR==1{print}
     NR>1{for (i=1;i<=NF;i++) a[i]+=$i}
     END{for (i=1;i<=NF;i++) printf a[i] OFS; printf "\n"}' file

It sets the comma as input/output field separator and then stores the sum of each column in an array a[]. Finally, it loops through the results and prints them. Note NR==1 is user to print the header.

For your given input it returns:

$ awk 'BEGIN{FS=OFS=","} NR==1{print} NR>1{for (i=1;i<=NF;i++) a[i]+=$i} END{for (i=1;i<=NF;i++) printf a[i] OFS; printf "\n"}' file
1st,2nd,3rd,4th,5th,Till-115thColumn
173,122,101,221,284,317,

Why wasn't your script working?

Because you missed a ; in the for declaration:

awk -F"," 'BEGIN {sum=0; OFS=","} {for (i=1 i<=NF; i++) a[i]+=$i } END {for (i in a) print a[i]}' a
awk: line 1: syntax error at or near )

so this makes it:

$ awk -F"," 'BEGIN {sum=0; OFS=","} {for (i=1; i<=NF; i++) a[i]+=$i } END {for (i in a) print a[i]}' file
                                             ^
174
124
104
225
289
317
like image 103
fedorqui 'SO stop harming' Avatar answered Dec 11 '22 09:12

fedorqui 'SO stop harming'


your codes did the calculation correctly, but has problem in output part:

awk -F, '{for(i=1;i<=NF;i++)a[i]+=$i}
        END{for(i=1;i<=NF;i++)printf "%d%s", a[i], (i==NF?"\n":",")}'file
like image 25
Kent Avatar answered Dec 11 '22 09:12

Kent