3 AWK スクリプトの構造

AWK に対するプログラムファイルを通常はスクリプトと呼びます。 1 行位のスクリプトであれば、ファイルにせずとも 直接 AWK の実行時にそれをコマンドライン上で与えることもできます。

スクリプトは、基本的に「関数定義部分」と「実行部分」に分かれます。 個々の関数定義は

  function 関数名 (引数 ...){ (関数本体) }
のように書きますし、実行部分は
  (パターン) { (実行部分本体) }
のように書きます。 関数定義、実行部分は、スクリプト内部に複数書くことができますし、 実行部分本体、関数本体の部分 (中かっこの中味) は 複数行の命令を書くこともできます。

AWK を行単位のフィルタとして使う場合、例えば

  % awk -f script.awk < file.in > file.out
のようにして、スクリプト (この例では script.awk) 以外に、 処理させる対象である入力 (この例では file.in、file.out がその結果の出力) を与えるのですが、その入力に対して実行は以下のように行われます。
  1. 「パターン」が ``BEGIN'' である実行部分がまず実行される
  2. 入力を 1 行読みこみ、それに対して各実行部分を順に適用するが、 「パターン」(= 条件) に合う実行部分のみが実行される
  3. それを入力の最後の行まで繰り返す
  4. 「パターン」が ``END'' である実行部分が最後に実行される

「パターン」が ``BEGIN'' である実行部分のみのスクリプト、 すなわち、

  BEGIN{ (実行部分本体) }
か、または
  BEGIN{ (実行部分本体) } 

  function 関数名 (引数 ...){ (関数本体) }

  function 関数名 (引数 ...){ (関数本体) }
  ...
のような形である場合、それを
  % awk -f file.awk
のようにすれば、入力なしで BEGIN 内の部分のみが実行され、 すなわち簡単なインタプリタとして実行することになります。

MS-Windows 環境では、コマンドプロンプトを立ち上げて、その上で

  > gawk -f file.awk
のようにします。 これを実行する場合、 gawk.exe があるディレクトリ (フォルダ) 内に スクリプトファイルも置いてそこで実行しまうのが簡単ですが、 gawk にパスを通せば任意の場所で実行できるので、 AWK スクリプト専用のフォルダを作って整理することもできます。

竹野茂治@新潟工科大学
2007年12月23日