重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

WindowsXP + gawk という環境です。
"0000000",16,"False"
"0000000",11,"False"
"0000000",4,"False"
"0000000",9,"False"
"0000000",39,"True"
"0000000",18,"False"
"0000000",39,"True"
"0000000",55,"True"
というようなファイルがあります。(0000000は任意の数字です)
3列目がTRUEで2列目が30未満のものだけ別ファイルに書き出すという処理をしたいのですが、うまくいきません。
gawk -F, '$3 == "True" {print $2}' file_name
などとやっているのですが、何も表示されません。
あとなおかつダブルクォーテーションは削除したいのですが、こちらもファイルへの書き出しがうまく行きません。
どなたかさくっとわかられる方がいらっしゃいましたらアドバイス頂ければと思います。
宜しくお願いします。

A 回答 (3件)

1. スクリプトをファイルに書く。


2. gawk -F, "$3==\"\x22True\x22\"{print $2}" file
のようにする。
3. gawk -F, "$3 ~/^\"True\"$/ {print $2}" file
のようにする。

cmd.exeでやるのは大変だということで。
    • good
    • 0
この回答へのお礼

ありがとうございました。
インラインで記述する時に、ダブルクォーテーションを「\x22」このように記述されてますが、これは一体どういうことなのでしょうか?
インターネットで調べながらコツコツとやってますが、良く分かってません。

お礼日時:2008/03/12 10:07

>ダブルクォーテーションを「\x22」このように記述


これは、ダブルクォートが三重に必要だからです。

 \"\"True\"\"

としてしまうと、\"\" でペアになっているように解釈されて
しまうので、それを防ぐためにコードであらわした \x22 を
使っているのです。これはgawkにはダブルクォートでくくられた
文字列の中のエスケープシーケンスと解釈されるので、
 "True" という文字列がgawkに渡されるというわけです。

なんにしろ、Unixで使われるシェルに比べるとクォート関連は
貧弱ですので(command.comよりはましですが)、無理せずに
ファイルに記述してそれを使うのがよろしいかと思います。

リダイレクト記号 '>', '<' とか、正規表現の文字クラスで '^' が
出てきたときに、cmd.exeの微妙なバグをつついて悲しい思いをすることもあります。
    • good
    • 0
この回答へのお礼

詳しい解説付きでありがとうございます。
後々のことを考えてファイルに書くことにします。
ありがとうございました。

お礼日時:2008/03/13 09:05

コマンドプロンプトのコマンドラインで、" を扱うのは素人には無理です。


スクリプトをファイルに書いて、-f オプションで指定して実行します。

ファイル: script.txt
{gsub(/"/,"");if($3=="True" && $2<30) print}

実行のコマンドラインは、
gawk -F, -f script.txt INPUT.txt > OUTPUT.txt
    • good
    • 0
この回答へのお礼

>コマンドプロンプトのコマンドラインで、" を扱うのは素人には無理です。

そのようです。素直にファイルに書くことにします。
ありがとうございました。

お礼日時:2008/03/13 09:04

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