AWK の簡単な説明 Last modified: May 15, 2002
AWK は Aho,Kernighan,Weinberger により開発されたプログラム言語である[参考文献]。
AWK は起動されると先ず AWK プログラムソースを読み込む。AWK は読み込んだプログラムを内部表現にコンパイルした後,指定された入力ファイルを順に処理していく。入力された各行について AWK はその行が AWK プログラムに指示されたパターンに合致するかどうかを調べる。そしてパターンが合致すればそれに対応する作用ブロックが実行される。
また,AWK は各行を読み込む度に,それをフィールドに分割する。フィールド区切り子としては予約変数 FS の値が使用される。もし FS の内容が 1 文字だけならば各フィールドはその文字で分けられる。そうでなければ FS は正規表現であると見なされる。
AWK のプログラム要素
AWK プログラムの構成は次のようになっている。
pattern { action statements }
function name(parameter list) { statements }
- パターン
BEGIN と END は特別なパターンであり,入力に対して反応するのではない。
パターン BEGIN を持つ作用は全て集められひとつの BEGIN ブロックを形成する。
それは入力が始まる前に実行される。
同様にパターン END を持つ作用もひとつにまとめられ入力が終わったときに(または exit 文が実行されたときに)実行される。
パターンと作用
AWK は行型(line oriented)の言語である。
先ずパターンが先にきてその後ろに作用を記述する。
作用は { と } で囲む。パターンもしくは作用のいずれか一方は省略できる。
パターンが省略されたときはその作用は入力された全ての行に対して実行される。
一方,作用を省略することは,
{ print }
と同義である。
すなわちその行全体を出力する。
- 予約変数
- FILENAME 現在処理中の入力ファイルの名前。
- FNR 現在処理中の入力ファイル中でのレコード番号。
- FS 入力フィールド区切り子。デフォルトでは1個の空白文字。
- NF 現在処理中のレコードに含まれるフィールドの個数。
- フィールド
入力されたファイルの各行は,FS に従ってフィールドに分解される。各フィールドはその位置に応じて $1,$2 等として参照される。$0 は入力行全体を保持している。
- 配列要素
角括弧([ と ])中の式の値(文字列型)によって指定される。例えば配列 A(2,4) は AWK では A[2,4] と表される。
- 制御文
- for (expr1; expr2; expr3) statement
繰り返し
- exit [ expression ]
作用から抜け出す
- printf fmt, expr-list
式(の並び)の値を書式付きで出力する。
- 関数
AWK に於ける関数は次の形で定義される。
function name(parameter list) { statements }
関数はあまり多く用意されていない(組込関数)。例えば,絶対値をとる関数なども,自分で作らないといけない。
関数はパターン−作用対の中の作用ブロックの中から呼ばれることによって実行される。
関数呼び出し時の実引数は,関数で宣言された仮引数に渡される。
参考文献
Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger:
The AWK Programming Language, Addison-Wesley, 1988.
直前のページへ戻る E-mail to Shigenobu AOKI