$ awk -v OFS='\t' '{for (i=1;i<=NF;i++) {s[2-NR%2,i]+=$i;s[3,i]+=$i;};$1=$1;print} END{for (n=1;n<=3;n++) print s[n,1],s[n,2],s[n,3]}' foo.txt
1 10 11
2 20 22
3 30 32
4 40 42
5 50 52
6 60 62
7 70 72
8 80 82
9 90 92
10 100 110
25 250 259
30 300 318
55 550 577
O acima foi testado no GNU awk e linux.
Como funciona
-
-v OFS='\t'
Opcional: isso define a saída como separada por tabulações.
-
{for (i=1;i<=NF;i++) {s[2-NR%2,i]+=$i;s[3,i]+=$i;}; $1=$1; print}
Isso percorre cada coluna, adicionando seus valores à matriz
s
. Para cada colunai
, as linhas pares numeradas são adicionadas as[2,i]
, enquanto as linhas ímpares são adicionadas as[1,i]
. Colunai
em todas as linhas é adicionada as[3,i]
.Esta linha é então impressa.
-
END{for (n=1;n<=3;n++) print s[n,1],s[n,2],s[n,3]}
Depois que chegamos ao final do arquivo, os resultados são impressos, primeiro para as linhas ímpares (
n=1
), depois para as linhas pares (n=2
), e então o total (n=3
).
Sun / Solaris
Eu tive vários relatórios que o awk padrão no Sun / Solaris tem problemas. Por favor, tente:
nawk -v OFS='\t' '{for (i=1;i<=NF;i++) {s[2-NR%2,i]+=$i;s[3,i]+=$i;};$1=$1;print} END{for (n=1;n<=3;n++) print s[n,1],s[n,2],s[n,3]}' foo.txt
Ou:
/usr/xpg4/bin/awk -v OFS='\t' '{for (i=1;i<=NF;i++) {s[2-NR%2,i]+=$i;s[3,i]+=$i;};$1=$1;print} END{for (n=1;n<=3;n++) print s[n,1],s[n,2],s[n,3]}' foo.txt
Ou:
/usr/xpg6/bin/awk -v OFS='\t' '{for (i=1;i<=NF;i++) {s[2-NR%2,i]+=$i;s[3,i]+=$i;};$1=$1;print} END{for (n=1;n<=3;n++) print s[n,1],s[n,2],s[n,3]}' foo.txt