AWK Script に引数を取らせたい

AWK を使いこなすようになってくると、 いつでも使える AWK Script は適当な場所に保存しておきたくなります。 そうなると、より汎用性のあるように書きたくもなるというものでしょう。 ここでは、引数を取らせることによって汎用性を飛躍的に向上させる ための技を伝授しましょう。引数を取れるようになることのメリットについては C言語編の 実行ファイルに引数を取らせたい を参照してください。 さて、伝授といってもそう難しいことは何もありません。 また、平均と分散を計算する AWK Script を考えますが、 今度は第何列の平均と分散を計算するかを引数で渡せるように します。次のようにすれば一撃です。 まず、AWK Script を次のように書き換えます。
----------------------------------
BEGIN{
  ave=0
  dev=0
}
$0!~/#/{
  n++
  #######################################################
  # ここがポイント
  #######################################################
  data[n] =  $col           # 第 $col 列のデータを取り込む
}
END{
  # 平均の計算
  for(m=1; m<=n; m++)
    ave = ave + data[m]
  ave = ave / n

  # 分散の計算
  for(m=1; m<=n; m++)
  dev = dev + (data[m]-ave)*(data[m]-ave)
  dev = dev / (n-1)

  # 結果の出力
  printf("average=%f deviation=%f\n",ave,dev)
}
----------------------------------
このスクリプトの中では、col という値が定義されてないので、 $col は何行目かはまだわかりません。 このスクリプトファイルの名前を avedev.awk とでもし、 噛ませるデータファイルの名前を data とすると、 awk を実行するときに、
----------------------------------
prompt> awk -f avedev.awk  -v col=1  data
----------------------------------
とすれば col に 1 が代入され、1列目の平均と分散が計算されます。 当然、2列目があれば
----------------------------------
prompt> awk -f avedev.awk  -v col=2  data
----------------------------------
によって1列目の平均と分散が計算されます。