- ベストアンサー
awkのファイル出力について
今までシェルスクリプトではレスポンスが悪い為awkを使い始めました やりたい物は一応作れたのですが、ファイル出力が美しく無いので ご教授ください。 shで A="/export/home/report" echo hogehoge > $[A]/test.txt という感じで、awkの中でファイル出力させるときに パスやファイル名を変数に入れてそこに出力する方法はないでしょうか? こんな感じでやるとエラーになります。 nawk '{ BEGIN{ A="/export/home/report" } END{ echo hogehoge > $[A]"/test.txt" } }'
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> print "hogehoge" >> >>> A"/test.txt" <<< A と "/test.txt"の間にスペースはありますか?
その他の回答 (2)
- entree
- ベストアンサー率55% (405/735)
awkでは変数名を$で修飾しません。 文字列の連結にはスペースを使用します。 awk '{ BEGIN { A = "/export/home/report" } END{ echo hogehoge > A "/test.txt" } }' この処理についてshellをawkに置き換えることで 速くなるとは思えないですが・・・
お礼
遅くなり申し訳ありません有難う御座いました。
補足
遅くなって申し訳ありません。 上記awk分はあくまで例として書きました。(本物は数百行になる為) 実際の物はシェルスクリプトで数百時間かかる処理が数十分ですむようになりました。 有難うございました。
- kmee
- ベストアンサー率55% (1857/3366)
awkでは ・echoではなく、print や printf を使用します。 ・文字列は""でくくります。 hogehoge だけでは変数hogehogeになります。 ・単純な変数には$は使いません。A "/test.txt" で 文字列が連結されて /export/home/report/test.txt になります。 $はフィールドにアクセスするのに使います。 ・基本の構文は パターン {アクション} です。awk '{...}'というのは、パターンが省略された使い方です。 BEGIN やENDは「パターン」にあたるので、{}の外に書きます { BEGIN{...} END{...} } ではなく BEGIN{...} END{...} です。 シェルスクリプトとはまったく別の言語なので、注意してください
お礼
遅くなり申し訳ありません有難う御座いました。
補足
すいません。コピペした時に編集ミスをして構文がおかしくなってました。 ご教授いただいた方法で行いましたが、私が躓いたのと同じエラーが出ました・・・ (エラー内容) nawk: syntax error 6 行目 コンテキスト print "hogehoge" >> >>> A"/test.txt" <<< nawk: illegal statement 6行目
お礼
遅くなり申し訳ありません有難う御座いました。
補足
返答が遅くなり申し訳ありません。自己解決しました。 どうやらawkは出力させるファイルはフルパスで書くか、 変数内にフルパスを入れる(ディレクトリだけでなくファイルも) 必要が有ったようです。 有難うございました。