• ベストアンサー

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" } }'

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> print "hogehoge" >> >>> A"/test.txt" <<< A と "/test.txt"の間にスペースはありますか?

goro-_-
質問者

お礼

遅くなり申し訳ありません有難う御座いました。

goro-_-
質問者

補足

返答が遅くなり申し訳ありません。自己解決しました。 どうやらawkは出力させるファイルはフルパスで書くか、 変数内にフルパスを入れる(ディレクトリだけでなくファイルも) 必要が有ったようです。 有難うございました。

その他の回答 (2)

  • entree
  • ベストアンサー率55% (405/735)
回答No.3

awkでは変数名を$で修飾しません。 文字列の連結にはスペースを使用します。 awk '{ BEGIN { A = "/export/home/report" } END{ echo hogehoge > A "/test.txt" } }' この処理についてshellをawkに置き換えることで 速くなるとは思えないですが・・・

goro-_-
質問者

お礼

遅くなり申し訳ありません有難う御座いました。

goro-_-
質問者

補足

遅くなって申し訳ありません。 上記awk分はあくまで例として書きました。(本物は数百行になる為) 実際の物はシェルスクリプトで数百時間かかる処理が数十分ですむようになりました。 有難うございました。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

awkでは ・echoではなく、print や printf を使用します。 ・文字列は""でくくります。 hogehoge だけでは変数hogehogeになります。 ・単純な変数には$は使いません。A "/test.txt" で 文字列が連結されて /export/home/report/test.txt になります。 $はフィールドにアクセスするのに使います。 ・基本の構文は パターン {アクション} です。awk '{...}'というのは、パターンが省略された使い方です。 BEGIN やENDは「パターン」にあたるので、{}の外に書きます { BEGIN{...} END{...} } ではなく BEGIN{...} END{...} です。 シェルスクリプトとはまったく別の言語なので、注意してください

goro-_-
質問者

お礼

遅くなり申し訳ありません有難う御座いました。

goro-_-
質問者

補足

すいません。コピペした時に編集ミスをして構文がおかしくなってました。 ご教授いただいた方法で行いましたが、私が躓いたのと同じエラーが出ました・・・ (エラー内容) nawk: syntax error 6 行目 コンテキスト print "hogehoge" >> >>> A"/test.txt" <<< nawk: illegal statement 6行目

関連するQ&A

専門家に質問してみよう