重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

今までシェルスクリプトではレスポンスが悪い為awkを使い始めました
やりたい物は一応作れたのですが、ファイル出力が美しく無いので
ご教授ください。

shで
A="/export/home/report"
echo hogehoge > $[A]/test.txt
という感じで、awkの中でファイル出力させるときに
パスやファイル名を変数に入れてそこに出力する方法はないでしょうか?

こんな感じでやるとエラーになります。
nawk '{
BEGIN{
A="/export/home/report"
}
END{
echo hogehoge > $[A]"/test.txt"
}
}'

A 回答 (3件)

> print "hogehoge" >> >>> A"/test.txt" <<<



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

この回答への補足

返答が遅くなり申し訳ありません。自己解決しました。

どうやらawkは出力させるファイルはフルパスで書くか、
変数内にフルパスを入れる(ディレクトリだけでなくファイルも)
必要が有ったようです。

有難うございました。

補足日時:2010/12/22 23:01
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/12/22 23:08

awkでは変数名を$で修飾しません。


文字列の連結にはスペースを使用します。

awk '{
BEGIN { A = "/export/home/report" }
END{ echo hogehoge > A "/test.txt" }
}'

この処理についてshellをawkに置き換えることで
速くなるとは思えないですが・・・

この回答への補足

遅くなって申し訳ありません。

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

有難うございました。

補足日時:2010/12/22 23:05
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/12/22 23:08

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行目

補足日時:2010/12/02 21:50
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/12/22 23:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!