Ele faz dar a soma de cada coluna, mas em uma coluna (desde que os dados sejam separados por espaços):
$ cat data.in
1 2
3 4
5 6
$ awk '{ for (i=1;i<=NF;i++) sum[i]+=$i } END { for (i in sum) print sum[i] }' data.in
12
9
Então, é uma questão de não gerar uma nova linha entre cada soma .
$ awk '{ for (i=1;i<=NF;i++) sum[i]+=$i } END { for (i in sum) printf("%d ", sum[i]); printf("\n") }' data.in
12 9
A função printf()
usa uma string de formato. O %d
é a string de formatação para um inteiro (use %f
para floats), e o espaço a seguir também será gerado após o inteiro. Em seguida, terminamos com a saída de uma nova linha explícita após o loop.
Outra maneira de resolvê-lo, usando a variável ORS
("Output Record Separator"):
$ awk 'BEGIN { ORS=" " } { for (i=1;i<=NF;i++) sum[i]+=$i } END { for (i in sum) print sum[i]; printf("\n") }' data.in
12 9
Veja também o alerta perspicaz de Dave Thompson nos comentários abaixo sobre a ordenação de chaves nos arrays associativos do Awk (que não têm garantia de serem classificados).