Eu preciso somar números localizados em um arquivo como este:
column1 column2 column3
row1 a(1,1) a(1,2) a(1,3)
row2 a(2,1) a(2,2) a(2,3)
row3 a(3,1) a(3,2) a(3,3)
row4 a(4,1) a(4,2) a(4,3)
column4 column5 column6
row1 b(1,1) b(1,2) b(1,3)
row2 b(2,1) b(2,2) b(2,3)
row3 b(3,1) b(3,2) b(3,3)
row4 b(4,1) b(4,2) b(4,3)
column7 column8 column9
row1 c(1,1) c(1,2) c(1,3)
row2 c(2,1) c(2,2) c(2,3)
row3 c(3,1) c(3,2) c(3,3)
row4 c(4,1) c(4,2) c(4,3)
e para produzir uma coisa dessas:
column1 a(1,1)+a(2,1) a(3,1)+a(4,1)
column2 a(1,2)+a(2,2) a(3,2)+a(4,2)
column3 a(1,3)+a(2,3) a(3,3)+a(4,3)
column4 b(1,1)+b(2,1) b(3,1)+b(4,1)
column5 b(1,2)+b(2,2) b(3,2)+b(4,2)
column6 b(1,3)+b(2,3) b(3,3)+b(4,3)
column7 c(1,1)+c(2,1) c(3,1)+c(4,1)
column8 c(1,2)+c(2,2) c(3,2)+c(4,2)
column9 c(1,3)+c(2,3) c(3,3)+c(4,3)
Eu tenho uma maneira de fazer isso no bash, mas ele só funciona com dois arrays 2D e falha com este exemplo, que contém três arrays 2D. Eu quero algo que possa ser útil para muitos arrays 2D.
Aqui o script que funciona apenas para dois arrays 2D.
sed 's/row[1-6]//;/^$/d' test |
pr -2t |
awk 'NR==1{$1=$1; print; next}
!(NR%2){split($0,a); next}
{for(i=1;i<=NF;i++) $i+=a[i]}1' |
tr ' ' '\n' |
pr -3t
Nota: para calcular as somas, substitua os índices de célula por valores com isto:
$ tr -d 'ab(,)' < file > filenums