プロが教えるわが家の防犯対策術!

UNIX初心者です。
以下のようなデータファイル(AA.dat)から、条件を満たすデータの特定フィールドを別のファイル(BB.dat)に出力したいのです。
どのようにしたら良いのでしょうか?


AA.dat(CSV形式)
aaa,22,33,44,55,66,77,88,1,1,0,0,1001
bbb,22,33,44,55,66,77,88,1,1,0,0,1002
ccc,22,33,44,55,66,77,88,1,0,0,0,1001
ddd,22,33,44,55,66,77,88,1,1,0,0,1002

抽出条件(フィールド=$1~$13)
$9==1 かつ $10==1 かつ $11==0 かつ $12==0 かつ $13==1002

出力するフィールド
$1,$2,$4,$7,$8

出力結果 BB.dat(CSV形式)
bbb,22,44,77,88
ddd,22,44,77,88

A 回答 (2件)

CSVに文字列が含まれている(区切り文字ではなくデータとしてのカンマがある)と、awkではかなりややこしくなりますが。

それがないCSVならば、こんな感じで行けるでしょう。

BEGIN{FS=",";OFS=FS}

$9==1 && $10==1 && $11==0 && $12==0 && $13==1002 {
print $1,$2,$4,$7,$8 > "BB.dat"
}


出力ファイルはこんな風にプログラムに組み込みで固定にするのではなくて、リダイレクトで指定した方が柔軟です。

この回答への補足

回答有り難うございました。
実行してみたのですが、上手くゆかず、データを確認したところ、
抽出条件のデータの一部に、ダブルクォーテーションで囲まれた数値が存在することが分かりました。

↓こういう場合はどのようにすれば良いのでしょうか?

AA.dat(CSV形式)
aaa,22,33,44,55,66,77,88,"1","1",0,0,1001
bbb,22,33,44,55,66,77,88,"1","1",0,0,1002
ccc,22,33,44,55,66,77,88,"1","0",0,0,1001
ddd,22,33,44,55,66,77,88,"1","1",0,0,1002

ダブルクォーテーションが無い場合については、うまく行きました!
有り難うございます。

補足日時:2007/04/04 10:54
    • good
    • 1
この回答へのお礼

解決しました!
$9=="\"1\""
ですね。有り難うございました!!

お礼日時:2007/04/04 13:52

CSV Parser


http://lorance.freeshell.org/csv/csv.html

上記URLの内容を csv.awk として保存し
csv.awk の
81行目から~101行目を書き換えて

awk -f csv.awk data.csv

と実行。

CSVってたいへ~ん。
    • good
    • 0
この回答へのお礼

回答有り難うございました。
UNIX初心者のため、内容を理解するのに時間がかかりますが、参考にさせていただきます。有り難うございました。

お礼日時:2007/04/04 11:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!