ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:ad333 awkでのテキスト処理について
困り度:
  • 困っています
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
などとやっているのですが、何も表示されません。
あとなおかつダブルクォーテーションは削除したいのですが、こちらもファイルへの書き出しがうまく行きません。
どなたかさくっとわかられる方がいらっしゃいましたらアドバイス頂ければと思います。
宜しくお願いします。
質問投稿日時:08/03/11 21:45
質問番号:3854268
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:sakusaker7 >ダブルクォーテーションを「\x22」このように記述
これは、ダブルクォートが三重に必要だからです。

 \"\"True\"\"

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

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

リダイレクト記号 '>', '<' とか、正規表現の文字クラスで '^' が
出てきたときに、cmd.exeの微妙なバグをつついて悲しい思いをすることもあります。
種類:回答
どんな人:経験者
自信:参考意見
回答日時:08/03/13 00:59
回答番号:No.3
この回答へのお礼詳しい解説付きでありがとうございます。
後々のことを考えてファイルに書くことにします。
ありがとうございました。

回答

良回答10pt

回答者:notnot コマンドプロンプトのコマンドラインで、" を扱うのは素人には無理です。
スクリプトをファイルに書いて、-f オプションで指定して実行します。

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

実行のコマンドラインは、
gawk -F, -f script.txt INPUT.txt > OUTPUT.txt
種類:回答
どんな人:専門家
自信:自信あり
回答日時:08/03/12 23:44
回答番号:No.2
この回答へのお礼>コマンドプロンプトのコマンドラインで、" を扱うのは素人には無理です。

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

回答

良回答20pt

回答者:sakusaker7 1. スクリプトをファイルに書く。
2. gawk -F, "$3==\"\x22True\x22\"{print $2}" file
のようにする。
3. gawk -F, "$3 ~/^\"True\"$/ {print $2}" file
のようにする。

cmd.exeでやるのは大変だということで。
種類:回答
どんな人:経験者
自信:参考意見
回答日時:08/03/11 22:53
回答番号:No.1
この回答へのお礼ありがとうございました。
インラインで記述する時に、ダブルクォーテーションを「\x22」このように記述されてますが、これは一体どういうことなのでしょうか?
インターネットで調べながらコツコツとやってますが、良く分かってません。
 
最新から表示回答順に表示良回答のみ表示