awk の文法2008年11月13日 13時55分10秒

awk の文法を簡単に紹介する。

awk は pattern-action の式をとる。条件式に一致する時に、ブロックが実行される。


pattern {action}

その名の通り、各入力行に対し pattern が評価され、真を返したときに、action が実行される。 BEGIN や END は特別な条件で、BEGIN はファイルを読む前に、END は全てのファイルを読み終った時に真を返す条件になる。この二つは、良く使う。

BEGIN の評価の順が、実装により異なっているので、記憶にとどめておきたい所だ。古来の実装だと、BEGIN 節が実行されたとに、コマンドラインからの引数が、割り当てられる。その後、第一行が読まれる。実は、それだと、BEGIN 節では、コマンドラインで初期化されていない変数を、初期化したり出来ない。そこで、GNU awk は、コマンドラインの引数を処理した後に、BEGIN 節を実行するように、再実装した。こちらの方が便利なのだが、時折移植性などで問題になる。

他に pattern には、if 等の条件文や、正規表現の一致などが行える。

また、awk には FS、NR、NF などの、大文字の特殊変数が存在する。FILENAME や、 NR の様に各行、ファイル毎に変更される変数と、FS 等の様に、内部処理で使われる変数がある。また、$1 は一列目を指すなどの様に行中での列を示す特殊変数もある。$0 は更に特別で、行全体を指す。

man awk や man nawk に言語の組み込み関数や、文法など細かく書かれている。他のスクリプト言語だと、一つの man で言語の詳細まで言及されているのは少ない。他にはシェル言語ぐらいだろう。これも一つの利点だ。