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