awk
特定の列の合計値を計算するコマンドを作成しましたが、予期しないことが発生しました。
# THE CONTENT OF TEST FILE
1
2
3
4
# MY AWK COMMAND
awk 'BEGIN {total=0} {print $1; $total=$total+$1; print $1, $total} END {print $total}' test
# RESULT
1
2 2
2
4 4
3
6 6
4
8 8
8
明らかに以降は の値$1
が変更されました$total=$total+$1
。
ところで値を再割り当てされていないようですが$1
、なぜ予想外に変わったのですか?どうすれば解決できますか?
答え1
符号なし変数は、非参照としてのみawk
参照してください。$
total
$total
そのawk
声明から:
$total=$total+$1
awk
これを次に展開します(変数はブロックでに設定されていますtotal
)。0
BEGIN{}
$0=$0+$1
したがって、$0
値を独自の値と最初のフィールドの値(同じ)に変更するので、$0
値を2倍にします$0
。設定を使用すると、$0
値も変更されます$1
。
達成することは、最初のフィールドのすべての値を一緒に追加することです。これは次のことで達成できます。
awk '{a+=$1;print a}' file
a
各行は$1
変数値に値を加算します。