みなさん < こん??は でび です
ええと、awkネタはabcで良いんでしたっけ?
いつのまにかgawk3.16がっ!と、awk再入門してみましたら、
gawkのバージョンは上がっても、私の頭の方のバージョンは
ちっとも上がっていませんでした。
どなたか、ちと教えてください。
以下のようなリストがあって、
----- book_list.txt -----
ビアドのローマの女たち,著者,A.バージェス
ビアドのローマの女たち,出版社,サンリオSF
ビアドのローマの女たち,出版年,1980
永遠へのパスポート,著者,J.G.バラード
永遠へのパスポート,訳者,永井淳 訳
永遠へのパスポート,出版社,創元推理文庫
永遠へのパスポート,出版年,1970
火星の黄金仮面,著者,O.A.クライン
火星の黄金仮面,出版社,創元推理文庫
火星の黄金仮面,出版年,1978
虚空の眼,著者,フィリップ・K・ディック
虚空の眼,訳者,大瀧啓裕 訳
虚空の眼,出版社,サンリオSF
夢みる宝石,著者,シオドア・スタージョン
夢みる宝石,出版社,ハヤカワ文庫
夢みる宝石,出版年,1979
創世記機械,訳者,山高昭 訳
創世記機械,出版社,創元推理文庫
創世記機械,出版年,1981
--------------------------
※フィールドによっては、1バイトスペースがある場合アリ、とします。
リストの全体を眺めた感じだと、どうも、最大項目数は
「題名,著者,訳者,出版社,出版年」の5つらしい・・・と。
で、出力を、本当は
----- out_list.txt -----
ビアドのローマの女たち,A.バージェス,,サンリオSF,1980
永遠へのパスポート,J.G.バラード,永井淳 訳,創元推理文庫,1970
火星の黄金仮面,O.A.クライン,,創元推理文庫,1978
虚空の眼,フィリップ・K・ディック,大瀧啓裕 訳,サンリオSF,
夢みる宝石,シオドア・スタージョン,,ハヤカワ文庫,1979
創世記機械,,山高昭 訳,創元推理文庫,1981
--------------------------
としたいのです。
そこで、以下のようにしたんですが、
------ book2csv.awk ------
BEGIN {
FS = ",";
}
{
# 上書きして初期化
author = "";
translator = "";
publisher = "";
year = "";
title = $1;
while ( $1 == title ) {
if ( $2 == "著者" ) { author = $3; }
if ( $2 == "訳者" ) { translator = $3; }
if ( $2 == "出版社" ) { publisher = $3; }
if ( $2 == "出版年" ) { year = $3; }
if( getline == 0 ) { break } else { getline }
}
printf( "%s,%s,%s,%s,%s,\n", title,author,translator,publisher,year );
}
------------------------
これだと、入るべきフィールドが正しくないレコードに紛れ込んだり、
ずれたりするようです。
なんか根本的に間違っているような気がするんですが、頭ワヤワヤに
なったので、どなたか、添削おながいします。
# getlineのところは、なんかwhileを上手く抜けられないので
# 苦し紛れに付加したものです。
# スコープってものの捉え方がだめなんだろうな、という予感は
# しているのですが…。
でび http://davi.txt-nifty.com/1984/