AWKは、入力から一行データを読むたびに空白文字を区切としてデータを分 割し、最初から順番に変数 $1、$2、$3、...に代入します。入力 のある一行がつぎのようなものだったとしましょう。
火車 743 98/02/01 新潮社 新潮文庫 み-22-8
この場合、$1=火車、$2=743、$3=98/02/01、$4=新潮社、$5=新 潮文庫、$6=み-22-8、となります。
そこで、'{print $1;}'というプログラムを AWKに与えてやりましょう。 すると、各行ごとにこのプログラムが実行されます。つまり$1の内容であ る書名が印刷(print)されます。実際にこの仕組を使って、書名だけを取出 してみましょう。
% gawk '{print $1;}' miyabe.data
書名
火車
かまいたち
蒲生邸事件
堪忍箱
クロスファイア [上・下]
幻色江戸ごよみ
心とろかすような
コットン4
今夜は眠れない
(省略)
データファイルの順に書名が取出せていますね。自分でもやってみてください。 プログラムの前後を '{ と }' で囲っていますが、今はそういうものだ と思っておいてください。
同じように本体価格を取出してみましょう。価格は$2に納められているは ずです。
% gawk '{print $2;}' miyabe.data
本体価格
743
505
1650
1456
819
552
マサの事件簿
750
552
(省略)
途中で「マサの事件簿」という予定外のものが出力されています。元データを 良く見ると題名が「心とろかすような マサの事件簿」となっています。
(省略)
クロスファイア [上・下] 819 98/10/30 光文社 カッパ・ノベルス
幻色江戸ごよみ 552 98/09/01 新潮社 新潮文庫 み-22-9
心とろかすような マサの事件簿 1300 97/11/28 東京創元社 短編集
(省略)
「マサの事件簿」という副題がついていて、題名の前後を半角の空白で区切っ てあったため、この行では2つ目のデータが本体価格ではなく「マサの事件簿」 になって、それが $2 に代入されてしまったのです。その2冊上に「クロスファ イア [上・下]」という本があるのですが、こちらは全角の空白で区切って あるので、うまく処理されています。いまのところ、仕方ないのでこのような 区切は全角の空白を使うことにしておきましょう。のち ほど、もっとましな対策を紹介します。
この「心とろかすような マサの事件簿」のデータを修整したファイルを miyabe.newとしておきます。
もうお分りかと思いますが、書名と出版日だけを見たいなら、$1と$3を printしてやります。ただし、$1と$3をそのまま並べると次のように 2つがひっついて表示されます。
% gawk '{print $1 $3;}' miyabe.new
書名発行
火車98/02/01
かまいたち96/09/01
蒲生邸事件96/10/10
(省略)
$1と$3をカンマ , で区切っておくと、適当に空白を入れてくれます。
% gawk '{print $1, $3;}' miyabe.new
書名 発行
火車 98/02/01
かまいたち 96/09/01
蒲生邸事件 96/10/10
(省略)
OGURISU Osamu