如何对矩阵的特定行求和

如何对矩阵的特定行求和

我需要对每列的特定行的矩阵元素求和。下面给出了矩阵的示例(输入)。所以矩阵有 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

相关内容