新しく質問する

awkのファイル出力について

役に立った:2件
  • 質問者:goro-_-
  • 投稿日時:2010/12/02 19:57
  • 困り度:困ってます
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

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

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

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

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:2件)
  • 参考になった:0件
  • 回答者:entree
  • 回答日時:2010/12/08 13:24

awkでは変数名を$で修飾しません。
文字列の連結にはスペースを使用します。

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

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

通報する

この回答への補足

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

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

有難うございました。

この回答へのお礼

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

  • 参考になった:0件

No.2ベストアンサー20pt

  • 回答者:kmee
  • 回答日時:2010/12/03 20:21

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

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

通報する

この回答への補足

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

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

有難うございました。

この回答へのお礼

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

  • 参考になった:0件
  • 回答者:kmee
  • 回答日時:2010/12/02 21:26

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

この回答へのお礼

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

  
このQ&Aは役に立ちましたか?(役に立った:2件)

このページのトップへ

Facebook公式ページ

公式Twitter