AWKで特定の行だけを処理する

データファイル全体から特定のフィールドを取出すことをみてきましたが、 「講談社から出版されたものだけ見たい!」ときもあります。そんなときは、 プログラムの { の前に / で囲って絞りこみの条件となる文字列を書く と、その文字列を含む行だけが処理の対象になります[*]

    % gawk '/講談社/ {print $0;}' miyabe.new
    ステップファザ−・ステップ  563  96/07/15  講談社  講談社文庫 み-42-1  
    震える岩 霊験お初捕物控  695  97/09/15  講談社  講談社文庫 み-42-2  
    %

講談社のものだけが取出されていますね。

ところで、この例のように各行をまるごと表示するときは$0を省略するこ とができます。printは引数が指定されない場合、$0を表示するように作ら れているのです。

    % gawk '/講談社/ {print;}' miyabe.new
    ステップファザ−・ステップ  563  96/07/15  講談社  講談社文庫 み-42-1  
    震える岩 霊験お初捕物控  695  97/09/15  講談社  講談社文庫 み-42-2  
    %

'{print;}'も省略できます。/文字列/だけを与えると、そのパターンを含む 行だけを表示します。

    % gawk '/講談社/' miyabe.new
    ステップファザ−・ステップ  563  96/07/15  講談社  講談社文庫 み-42-1  
    震える岩 霊験お初捕物控  695  97/09/15  講談社  講談社文庫 み-42-2  
    %

同じように「 96年に出版されたものだけ見たい!」ときもあります。 今の場合、絞り込みの条件を /96/ としましょう

    % gawk '/96/' miyabe.new
    かまいたち  505  96/09/01  新潮社  新潮文庫 み-22-6  短編集
    蒲生邸事件  1650  96/10/10  毎日新聞社  
    堪忍箱  1456  96/10/30  新人物往来社  
    ステップファザ−・ステップ  563  96/07/15  講談社  講談社文庫 み-42-1  
    鳩笛草  796  95/09/25  光文社  カッパノベルス  
    人質カノン  1359  96/01/30  文藝春秋  
    %

どの行にも96が含まれていますね。え、「鳩笛草は 95年の出版じゃ ないか」って?これは価格が796で、そこに96が含まれていたから表示されちゃっ たんですね。 AWK 96年という意味を考えて処理しているのでは なく、96という文字の並びが含まれるかどうかしかチェックしていないのです。

この場合、発行年月日を「年/月/日」という形式で保存してあるので、直後の  / も含めて、次のようにしてやると良いでしょう。ただし、単純に /96//  とすると、区切の / との区別が付かなくなりますから、 \ を直 前に置いて /96\// とします。

    % gawk '/96\//' miyabe.new
    かまいたち  505  96/09/01  新潮社  新潮文庫 み-22-6  短編集
    蒲生邸事件  1650  96/10/10  毎日新聞社  
    堪忍箱  1456  96/10/30  新人物往来社  
    ステップファザ−・ステップ  563  96/07/15  講談社  講談社文庫 み-42-1  
    人質カノン  1359  96/01/30  文藝春秋  
    %

もし \ を置き忘れるとエラーになります。

    % gawk '/96//' miyabe.new
    gawk: cmd. line:1: /96//
    gawk: cmd. line:1:     ^ syntax error
    gawk: cmd. line:1: /96//
    gawk: cmd. line:1:      ^ unexpected newline or end of string
    %

この /文字列/ の条件指定に対しても、&&や||!が使えます。

    % gawk '/96\// || /97\//' miyabe.new
    かまいたち  505  96/09/01  新潮社  新潮文庫 み-22-6  短編集
    蒲生邸事件  1650  96/10/10  毎日新聞社  
    堪忍箱  1456  96/10/30  新人物往来社  
    心とろかすような マサの事件簿  1300  97/11/28  東京創元社    短編集
    淋しい狩人  466  97/02/01  新潮社  新潮文庫 み-22-7  
    ステップファザ−・ステップ  563  96/07/15  講談社  講談社文庫 み-42-1  
    天狗風 霊験お初捕物控〈二〉  1800  97/11/15  新人物往来社  
    長い長い殺人  819  97/05/25  光文社  カッパ・ノベルス  
    初ものがたり  553  97/03/17  PHP研究所  PHP文庫 み-14-1  
    人質カノン  1359  96/01/30  文藝春秋  
         (省略)

なお、NRを使った行の指定でも次のように'{print;}'を省略できます。

    % gawk 'NR == 2' miyabe.new
    火車  743  98/02/01  新潮社  新潮文庫 み-22-8  
    % 

OGURISU Osamu
2004-01-15