各列に対して、特定の行の行列要素を合計する必要があります。行列(入力)の例を以下に示します。したがって、行列には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