AWKによって分割された行のデータをそれぞれをフィールドと言 います。またこのフィールドのひと固まりである各行をレコードと 呼びます。この文庫のデータの場合、一冊の文庫全体のデータで一つのレコー ドをつくり、書名などの項目がフィールドになります。
AWKにはいくつか組込変数があって、そのうちのNRは幾つめのレ コードを処理しているか、NFは処理中のレコードにいくつのフィールドがある かを記憶してます。このNRを使って行番号を追加できます。
% gawk '{print NR, $1, $3;}' miyabe.new
1 書名 発行
2 火車 98/02/01
3 かまいたち 96/09/01
4 蒲生邸事件 96/10/10
(省略)
$0はレコード全体、つまり元のデータ行そのものとなりますから、次のよ うにすることで行番号を振ることもできます(cat -n miyabe.newと同じ)。
% gawk '{print NR, $0;}' miyabe.new
1 書名 本体価格 発行 発行社 文庫 備考
2 火車 743 98/02/01 新潮社 新潮文庫 み-22-8
3 かまいたち 505 96/09/01 新潮社 新潮文庫 み-22-6 短編集
4 蒲生邸事件 1650 96/10/10 毎日新聞社
(省略)
NRを使って特定の行だけを取出すこともできます。次の例ではNRが3に等しい ところ、つまり3行目だけを取出しています。 { } で囲まれたプログラム の前に条件式を書いてやればいいのです。
% gawk 'NR == 3 {print NR, $0;}' miyabe.new
3 かまいたち 505 96/09/01 新潮社 新潮文庫 み-22-6 短編集
%
次の例では1行目から3行目を取出します。
% gawk 'NR <= 3 {print NR, $0;}' miyabe.new
1 書名 本体価格 発行 発行社 文庫 備考
2 火車 743 98/02/01 新潮社 新潮文庫 み-22-8
3 かまいたち 505 96/09/01 新潮社 新潮文庫 み-22-6 短編集
%
この条件は、&&や||、!を使って、論理和や論理積、否定を
取ることができます。
% gawk 'NR >4 && NR < 7 {print NR, $0}' miyabe.new
5 堪忍箱 1456 96/10/30 新人物往来社
6 クロスファイア [上・下] 819 98/10/30 光文社 カッパ・ノベルス
%
% gawk 'NR == 2 || NR == 4 {print NR, $0}' miyabe.new
2 火車 743 98/02/01 新潮社 新潮文庫 み-22-8
4 蒲生邸事件 1650 96/10/10 毎日新聞社
%
次の例は NR != 1 としても同じになります。
% gawk '!(NR == 1) {print NR, $0}' miyabe.new|head
2 火車 743 98/02/01 新潮社 新潮文庫 み-22-8
3 かまいたち 505 96/09/01 新潮社 新潮文庫 み-22-6 短編集
4 蒲生邸事件 1650 96/10/10 毎日新聞社
5 堪忍箱 1456 96/10/30 新人物往来社
(省略)
NFの使用例はのちほど見ましょう。
OGURISU Osamu