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件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
awkでは変数名を$で修飾しません。
文字列の連結にはスペースを使用します。
awk '{
BEGIN { A = "/export/home/report" }
END{ echo hogehoge > A "/test.txt" }
}'
この処理についてshellをawkに置き換えることで
速くなるとは思えないですが・・・
この回答への補足
遅くなって申し訳ありません。
上記awk分はあくまで例として書きました。(本物は数百行になる為)
実際の物はシェルスクリプトで数百時間かかる処理が数十分ですむようになりました。
有難うございました。
この回答へのお礼
遅くなり申し訳ありません有難う御座いました。
No.2ベストアンサー20pt
> print "hogehoge" >> >>> A"/test.txt" <<<
A と "/test.txt"の間にスペースはありますか?
この回答への補足
返答が遅くなり申し訳ありません。自己解決しました。
どうやらawkは出力させるファイルはフルパスで書くか、
変数内にフルパスを入れる(ディレクトリだけでなくファイルも)
必要が有ったようです。
有難うございました。
この回答へのお礼
遅くなり申し訳ありません有難う御座いました。
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行目
この回答へのお礼
遅くなり申し訳ありません有難う御座いました。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示











