AWKにおけるパターンとアクション

AWKのプログラムは、パターンとアクションの組の列と(もし必要なら)関数 定義から成ります。 関数定義の説明はにして、ここではパ ターンとアクションの説明をしましょう。

AWKのプログラムにおけるパターンとアクションの組は、プログラム中に次 の形式で記述されます。

    pattern   { action statements }

パターンにはBEGINとEND、/正規表現/やNRを使った行指定などがあります。ア クションは、そのパターンに入力行がマッチしたときに実際に行われる処理の 記述です。例えば、

    /96\// { print $1, $3; }

は /96/ がパターンで、{ print $1, $3; }がアクションです。

    % gawk '{print $1, $3; }' miyabe.new

としたときはパターンの指定がないので、この場合は全ての入力行にマッチす るとされます。また

    % gawk '/96\//' miyabe.new

とアクションの指定がない場合はデフォルトのアクションとして '{print;}' が使われます。

実は今までの例では、パターンとアクションの組が一つの例だけを示してきま したが、 ; で区切って複数指定しても構いません。次のようにすれば、95年 と96年の出版物が表示できます。

    % gawk '/95\//; /96\//' miyabe.new
    かまいたち  505  96/09/01  新潮社  新潮文庫 み-22-6  短編集
    蒲生邸事件  1650  96/10/10  毎日新聞社  
    堪忍箱  1456  96/10/30  新人物往来社  
    ステップファザ−・ステップ  563  96/07/15  講談社  講談社文庫 み-42-1  
    とり残されて  466  95/12/10  文藝春秋  文春文庫 み-17-2  
    鳩笛草  796  95/09/25  光文社  カッパノベルス  
    人質カノン  1359  96/01/30  文藝春秋  
    本所深川ふしぎ草紙  427  95/09/01  新潮社  新潮文庫 み-22-5  
    龍は眠る  660  95/02/01  新潮社  新潮文庫 み-22-4  
    %

この場合は

    % gawk '/9[56]\//' miyabe.new

とするのと同じです。両方ともデフォルトのアクション'{print;}'が使われ ていますが、それぞれ別のアクションを指定することもできます。

    % gawk '/95\// {print $1;} /96\// {print $3;}' miyabe.new
    96/09/01
    96/10/10
    96/10/30
    96/07/15
    とり残されて
    鳩笛草
    96/01/30
    本所深川ふしぎ草紙
    龍は眠る
    %

95年分は書名($)が、96年分は発行日($3)が表示されています。 スクリプトで書けば、次のようになります。

    #!/usr/local/bin/gawk -f
    # p_and_a.awk: 2つのパターンとアクションがある例

    /95\// {
        print $1;
    }

    /96\// {
        print $3;
    }

BEGINやENDはそれぞれ入力の開始前と終了後にマッチする特別なパターンです。 それぞれ複数あっても構いません。すべて実行されます。ただし、アクション を省略することはできません。

OGURISU Osamu
2004-01-15