awk のテキスト処理の過程を整理して示せば次のようになる:
1. テキストを一行ずつ読み込み (入力)
2. 一行ずつ, スクリプトによって指示された処理を実行し
3. その結果をしたり, 書き出す (出力)
awk が行う作業の手順を記述したプログラムを普通はスクリプトと呼ぶ. awk のスクリプトは, 次の三つの部分から構成される:
BEGIN{アクション} #準備作業
パターン 1 {アクション 1} # 本処理
パターン 2 {アクション 2} # 本処理
...
END{アクション}# 後始末
BEGIN 部は, 入力データを読み込む前に行う, 準備作業を記述する. ここを記述すれば, awk を立ち上げた場合, 無条件に, 記述されたアクションを実行する. 準備作業がなければここは省略することができる.
パターン {アクション} で, 実際に入力データを処理する. 従って, ここを省略することは普通はないが, BEGIN 部のみを使ってスクリプトのテストなどを行う場合, この本処理の部分を省略することもある.
END 部は, 全ての入力を処理し終わった後に行う後始末やまとめの作業を記述する. これもなければ省略される.
従って, awk のスクリプトの中心は, 本処理の:
パターン {アクション}
である. これを, 普通の言葉に直すと, 読み込んだ一行が, あるパターンに一致するなら, {} の中の, アクションを実行せよということである. 実物をお目にかけよう:
/東京/ {print}
これは, [ 読み込んだ一行の中に [東京] という単語があれば, その行をプリント (出力)せよ ] という処理を命じている. [東京] の前後にはある記号 // はこれが正規表現だということを表している. この一行のスクリプトで, 読み込んだファイルの中の [東京] と言う語を含む行がすべて出力される.
実際に awk を動かしてみよう. まず処理すべきデータファイルを用意する. つぎのような内容のテキストファイルを作って [awk_data.txt] と名付けてください
awk_data.txt
東京は日本の首都です
日本の首都は東京
明日は東京に主張します
大阪は商業都市です
うまいもんなら大阪
今日は大阪にいます
様々な awk 実行処理系を実行した結果はしたのようになる:
[cactus:~/code_awk/tuts]% awk '/東京/ {print}' awk_data.txt
東京は日本の首都です
日本の首都は東京
明日は東京に主張します
[cactus:~/code_awk/tuts]% gawk '/東京/ {print}' awk_data.txt
東京は日本の首都です
日本の首都は東京
明日は東京に主張します
[cactus:~/code_awk/tuts]% mawk '/東京/ {print}' awk_data.txt
東京は日本の首都です
日本の首都は東京
明日は東京に主張します
[cactus:~/code_awk/tuts]% nawk '/東京/ {print}' awk_data.txt
東京は日本の首都です
日本の首都は東京
明日は東京に主張します
正規表現 を /大阪/ にして, 実行結果は:
[cactus:~/code_awk/tuts]% gawk '/大阪/ {print}' awk_data.txt
大阪は商業都市です
うまいもんなら大阪
今日は大阪にいます
もう一つの例を上げたい, あるディレクトリの中に全てのサブディレクトリを表示したい, したの一行を入力すると:
[cactus:~/code_awk]% ls -l | gawk '/dr/ {print}'
drwxr-xr-x 3 Wtopia staff 102 Oct 30 20:22 ai/
drwxr-xr-x 4 Wtopia staff 136 May 23 23:34 game/
drwxr-xr-x 37 Wtopia staff 1258 Oct 31 03:54 soccer/
drwxr-xr-x 3 Wtopia staff 102 Nov 6 16:25 tuts/
drwxr-xr-x 14 Wtopia staff 476 Oct 31 03:49 vitamina-2.0/
drwx------ 5 Wtopia staff 170 May 22 19:49 xmonthly/
drwxr-xr-x 11 Wtopia staff 374 May 12 2007 yawk-2.0.0-beta5/