質問 |
||
| 質問者: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」このように記述されてますが、これは一体どういうことなのでしょうか? インターネットで調べながらコツコツとやってますが、良く分かってません。 |