行列の特定の行を合計する方法

行列の特定の行を合計する方法

各列に対して、特定の行の行列要素を合計する必要があります。行列(入力)の例を以下に示します。したがって、行列には​​4つの列と6つの行があります。列ごとに特定の数の行を合計する必要があります。つまり、各列に対して、row1 + row2 + row5とrow3 + row4 + row6の要素を合計する必要があります。

入力する:

   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                   

出力は以下のようになります。

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

私はawkこれを次のように使用しようとしています:

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

しかし、期待した結果を得ることはできません。

答え1

KISSは次のように実装されています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

関連情報