2010年9月27日月曜日

パターンの書式と使い方 - AWK

AWKのパターンと制御文
○Gawk on Windows ○Gawk ○mawk32 ○Mawk ○awk
AWKの特徴の1つ、パターンの書式は、大きく分けると3種類あります。

o 条件なし = 条件を書かないパターン
o 条件1つ = 行を取り出す条件を書くパターン
o 条件2つ = 開始条件と終了条件を書くパターン

パターンは、AWKプログラム内に複数並べて書く事が出来ます。
条件を2つ書く場合、少し変わった動きになりますので留意します。


**** 条件なし = 条件を書かないパターン
** 書式
--------
{ 行に対する処理 }
--------

o 行に対する処理 -- 1行毎に呼び出されます。省略する事も出来ます。

** 使用例
--------
{ print "毎行表示します。" $0 }
--------



**** 条件1つ = 行を取り出す条件を書くパターン
** 書式
--------
条件 { 行に対する処理 }
もしくは
条件
--------

o 条件 -- 行を取り出す条件を指定します。
o 行に対する処理 -- 省略する事も出来ます。括弧まで省略すると、print $0; になります。

** 使用例
--------
/ミクさん/ # 「ミクさん」が含まれている行を表示します
/ミクさん/ { print "「ミクさん」が含まれている行です。" $0; }

$1 ~ /ミクさん/ { print "1列目に「ミクさん」が含まれている行です。" $0; }
$1 == "ミクさん" { print "1列目が「ミクさん」とだけ書かれている行です。" $0; }

/ミクさん/ && /ネギ/ { print "「ミクさん」と「ネギ」が含まれている行です。" $0; }
/ミクさん/ || /ネギ/ { print "「ミクさん」もしくは「ネギ」が含まれている行です。" $0; }

BEGIN { print "プログラムの最初に1回実行します。"; }
END { print "プログラムの最後に1回実行します。"; }
--------

o 条件に /ミクさん/ と書くと、$0 ~ /ミクさん/ の意味になります。
o 正規表現の代わりに "ミクさん" と書くと、1 と同じ意味になって全行ヒットします。


**** 条件2つ = 開始条件と終了条件を書くパターン
** 書式
--------
開始条件, 終了条件 { 行に対する処理 }
もしくは
開始条件, 終了条件
--------

o 開始条件 -- この行から実行します。終了条件後、また探し始めます。
o 終了条件 -- この行までを実行します。
   + 入力ファイルを複数指定した場合、ファイルがつながっているものとみなします。
   + = 1つのファイルの読み込みが終わっても、終了条件が見つかるまでヒットします。
o 行に対する処理 -- 省略する事も出来ます。括弧まで省略すると、print $0; になります。

** 使用例
--------
/ミクさん/, /ネギ/ #「ミクさん」登場行から「ネギ」登場行までを表示します
/ミクさん/, /ネギ/ { print "「ミクさん」登場行から「ネギ」登場行まで。" $0; }
--------

o 「ネギ」登場行もヒットします。
   + 「ネギ」行が2行並んでいる時、最初の行だけヒットします。
o 「ネギ」登場行の後、「ミクさん」登場行が現れると、またヒットします。
o ファイルの終わりまで「ネギ」が登場しない場合、次の入力ファイルは「ネギ」が登場するまでヒットし続けます。


**** 確認した処理系
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のパターンと制御文▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > if = 条件に一致したら実行する
    else = ifで実行しない時に実行する
    switch = 選択肢を選んで実行する(Gawk専用)
    +
    AWKで最も短いプログラム
    AWKプログラムの基本パターン
(2010年9月28日追加。各パターンの構成要素説明に条件部分を追加)