
awk '{ for (i = 1; i <= NF; i++) sum[i]+=$i} END{for (i in sum) print sum[i]}' file1 > file2
これはレコードごとの合計には役立ちますが、同様のスキームは列別の合計には役立ちません(おそらく)。 n 列に対する列別の追加を一般化するには?
cat file1
23 46 45
45 57 58
56 78 74
cat file2
114
160
208
答え1
各レコードのフィールドの合計を計算するには、次の手順を実行します。
awk '{sum = 0; for (i = 1; i <= NF; i++) sum += $i; print sum}' < file1 > file2
中かっこで始まる行動先行せずに各入力行で実行されるステートメント。状況これにより、実行は以下を満たす行に制限されます。状況。
各行:
- 変数を
sum
ゼロに初期化します。 - フィールド#1で始まり、最後のフィールド(特殊変数)で終わり、
NF
そのフィールドの値()だけ増加しながらフィールドを繰り返します。sum
$i
- 変数の値を印刷します
sum
。
答え2
これはawkより少し遅いですが、非常に簡潔です。
perl -MList::Util=sum0 -lane 'print sum0(@F)' file1
それを使うsum0
コア List::Util モジュールの機能です。