Como somar números dentro de muitos arrays 2D

2

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
    
por alloppp 31.05.2016 / 02:48

1 resposta

1

Suponho que o truque seja usar -3t para o primeiro pr e depois também adicionar -w200 (ou mais) para evitar que a última coluna seja cortada.

Geralmente, se você tiver N matrizes, você usaria o comando pr -${N}t -w $((N*W)) as first pr , onde W é a largura de caractere da matriz (digamos, aproximadamente 10 para cada coluna mais um bit) .

Tudo o mais deve estar bem.

    
por 31.05.2016 / 10:13