행렬의 특정 행을 합산하는 방법

행렬의 특정 행을 합산하는 방법

각 열에 대해 특정 행의 행렬 요소를 합산해야 합니다. 행렬(입력)의 예가 아래에 나와 있습니다. 따라서 행렬에는 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

관련 정보