• ベストアンサー

AWkの配列についてのデバッグ

awkプログラミングを勉強しています。配列を使ったスクリプトがうまく動作しないのでネットで検索していると"配列を使っていてうまく動かない場合、awk コマンドの引数に --dump-variables を指定することで、利用している変数および配列の一覧を awkvars.out というファイルに出力することができます。” という書き込みを見つけました。この機能を使用してみたいのですが、うまくいきません。 スクリプトに #!/nin/awk -f --dump-variables としてもなにも特別な動作はしてくれませんでした。

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

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

気を付けることが4つ。 1) awkといっても、何種類かの実装があります。本来のawkにはそんな長い名前のオプションはありません。おそらく、GNU awkやその派生品用と思われます。 あなたの使っているawkがGNU版かそうでないか確認してください。 調べ方はいろいろありますが、例えば awk --version と実行してみてください。対応していれば、どんなawkか表示されます。GNU Awk~と表示されたらGNU版です。それ以外だったり、エラーになるようなら、GNU版ではありません。 2) オプションには順番が大事なものがあります。 -f は次の引数をスクリプトファイル名だとして処理します。awk -f --dump-variables では、「--dump-variables」というファイル名のスクリプトを実行しようとします。 3) /ninは/binの間違いでしょうか。 このような表記(shebangと言うそうですが)は、この最初の行を認識するシステムで、直接実行した場合にのみ有効です。 ./script.awk とかいうように。 awk script.awk のように実行しているなら、この1行目にオプションつけても意味がありません。 4) また、shebangに引数を書いたときに、どのように解釈されるか、もシステムによって違います。 あるシステムでは「-f」「--dump-variables」という2つの引数として解釈され、別のシステムでは「-f --dump-variables」という一つの引数だと解釈されます。 確実に動作させようとするなら、GNU awkだとして、 awk --dump-variables -f スクリプト とコマンドラインで実行させることでしょう。

Kasaoka-Taroh
質問者

お礼

的確なアドバイスありがとうございます。大変参考になりました。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.3

スクリプトの先頭に #!/bin/awk -f --dump-variables と書いていて、スクリプト名だけで実行しているとすると、先頭行のオプションは1つしか効かないので、--dump-variables は無視されます。つまり、 #!/bin/awk -f --dump-variables と書いても、#!/bin/awk -f と書いても同じ動作です。 そのオプションを使いたかったら、シェルのコマンドラインから awk --dump-variables -f ファイル名 ですね。 デバッグでの効果については、過度の期待は禁物です。スクリプトを見直す方がずっと効果的です。

  • gtx456gtx
  • ベストアンサー率18% (194/1035)
回答No.1

>#!/nin/awk -f --dump-variables このような機能があること知らないですが・・・所詮はインタープリタ! デバック機能を使えわず、自分でprint文を挿入して、変数の値を確認する方が早いと思います。 ところで何故、AWK? Perlは使わないですか? まぁ~Perlでも、デバック環境ないですが ^ ^;