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