Como somar linhas específicas de uma matriz

1

Eu preciso somar os elementos da matriz de linhas específicas para cada coluna. Um exemplo da matriz é dado abaixo (entrada). Então a matriz tem 4 colunas e 6 linhas de números. Eu preciso somar os números de linhas específicas para cada coluna. Em outras palavras, preciso somar os elementos row1 + row2 + row5 e row3 + row4 + row6 para cada coluna.

Entrada:

   column1  column2 column3 column4    
     11.1     12       13     4          
     21.3     22       23     3                  
     31       32       33    45            
     41       42       43   536              
     23       32        6     5                   
      4        5        3     2                   

A saída deve ser assim.

  column1 column2 column3 column4    
    55.4    66      42      12
    76      79      79     583

Eu estava tentando usar awk assim:

awk 'NR==1{$1=$1; print; next} !(NR%2){split($0,a); next} {for(i=1;i<=NF;i++) $i+=a[i]}1' file

mas não consigo obter o resultado esperado.

    
por alloppp 02.06.2016 / 14:40

1 resposta

3

Implementação do KISS em awk :

awk '
    FNR == 1 {
        n=NF;print;next
    } 
    FNR == 2 || FNR == 3 || FNR == 6 {
        for (i=1;i<=NF;i++) a[i]+=$i;
    } 
    FNR == 4 || FNR == 5 || FNR == 7 {
        for (i=1;i<=NF;i++) b[i]+=$i
    } END {
        for (i=1;i<=n;i++) printf("%8s", a[i]); print ""; 
        for (i=1;i<=n;i++) printf("%8s", b[i]); print "";
    }
' file
    
por 02.06.2016 / 15:26