2010年9月8日水曜日

AWKプログラム実行時に変数を設定する方法 - AWK

AWKプログラムを動かす
AWKのパターンと制御文
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
AWKプログラム実行時に変数を設定したい時は、-v オプションを使います。
もしくは、入力ファイル名を指定する所で、変数名=値 の形で指定します。

**** 書式
--------
-v 変数名=値
もしくは
(入力ファイルを書く場所で) 変数名=値
--------

o -vは、AWK実行時に指定するオプションです。
o 変数名 -- 「=」文字の前後は空けずに書きます。
o 値 -- 空白文字やタブ文字を含む時は、「"」で括ります。


**** 使用例
** その1。-v オプションを使った書き方
--------
gawk -v a=ミクさん -v b=393 -f a.awk in.txt > out.txt
gawk -v a="1 2 ミクさん" -f a.awk in.txt > out.txt
gawk -v a="おはようございます。\nミクさん\t393\n" -f a.awk in.txt > out.txt
--------

o 上から、変数を2つ設定する方法、空白やタブ文字が入る時の括り方、特殊文字も指定可能。
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。

** その2。入力ファイル名の所に書く書き方
--------
rem # 入力ファイルを書く場所でのみ、指定出来ます。
gawk "{ print a \" : \" $0 }" a=ミクさん in.txt > out.txt

rem # -f オプションを使う場合。--を使うと、入力ファイルの始まりを指示出来ます。
gawk -f a.awk -- a=ミクさん in.txt in2.txt > out.txt
gawk -f a.awk in.txt a=ミクさん in2.txt > out.txt
gawk -f a.awk in.txt in2.txt a=ミクさん > out.txt
gawk -f a.awk -- a=ミクさん in.txt a=リンレン in2.txt a=ルカ様 > out.txt
--------

o このように指定した変数は、BEGIN内では、まだ未定義です。
o 最後の入力ファイル名よりも後に指定した変数は、ENDに入った時に登場します。


**** 機能
o -v オプションを使って指定すると、BEGINの処理が始める前に、変数の値が設定されます。
   + このオプションは、入力ファイル名の指定が始まる前に指定します。
   + 変数を2つ設定したい時は、-v オプションを2回指定します。
o -v オプションを使わない形で指定すると、書いた位置で、変数の値が設定されます。
   + 入力ファイル名を書く場所で指定します。
   + 変数の値は、変数を指定した次の入力ファイル読み込みの時に確認出来ます。
   + 最後の入力ファイルの後ろに書くと、ENDに入った時に値を確認出来ます。
o 空白文字やタブ文字が混じっている時は、「"」で括ります。文字列を指定する感覚です。
o \記号も指定可能です。「"」使用はお好みで。


**** おまけ。AWKプログラム内で変数を設定する方法
o 代入文を使用します。
o 複雑な条件がある時は、こちらの方が便利です。
o -v オプションと同じタイミングで設定したい時は、BEGINの中に書きます。
--------
BEGIN {
  a = "ミクさん"; # 文字列の時
  b = "393"; # 文字列だと強調したい時
  b = 393; # 数値の時
  b += 3; # bの値は、393 + 3 = 402。数値の時は、左辺に対して演算する事も出来ます。
  c = (b == 393) ? "ミクさん": "通行人A"; # 詳しくは、条件演算子
}
--------



**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3
o original = the one true awk(updated May 1, 2007)


==
関連ページ:
    ▼AWKプログラムを動かす
    ▼AWKのパターンと制御文▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > AWKで入力ファイルの指定を不要にする
    AWKの入力ファイルを、AWKプログラムの中で追加、削除(= キャンセル)する
    入力ファイルを手入力する
(2010年9月8日追加。入力ファイル名の所で指定する方法)