{ x += $0 } END { print x/FNR }
このスクリプトには2つのアクションがある。最初のものは,
{ x += $0 }である。
x += $0というのが,アクションの本体である。
x = x+$0という書き方なら分かるであろう。
ところで,「入力された内容(この場合は「1」)は文字じゃないか?文字を足し算できるのか?」と思った人もいるだろう。
大抵のプログラム言語では文字と数値は同じではないが,AWKは「必要に応じて,文字としても数値としても使える」ことになっている。
また,「『変数xの現在の内容に,$0の内容を加算して...』といっても,最初に加算するときの変数xの内容は何なんだ?」と思った人もいるだろう。
AWKでは,「変数が最初に使われるとき,その内容は空文字である」ことになっている。また空文字が数値として使われるときには0であると解釈される。
さて,1行目を読み込んだときに取られるアクションは分かったとして,「2行目以降はどのように処理されるのだろうか?」
AWKは入力データが無くなるまで次々とデータを読んではアクションを実行するということを繰り返す。
入力ファイルを読み終えた直後の,変数xの内容はデータファイルの中にあった数値の合計になっている。 例として使う入力データファイルを処理した場合には,x=55ということである。
さて,先ほど,このスクリプトにはアクションが2つあると言った。2つめのアクションは,
END { print x/FNR }である。
ENDパターンに対応するアクションは,
print x/FNRである。
さて,スクリプトの実際の内容は分かったとして,これをどのようにコンピュータで実行させるのだろうか?