みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2011-08-25 12:17:25

QNo.6966350

困ってます

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

気を付けることが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 スクリプト とコマンドラインで実行させることでしょう。

投稿日時 - 2011-08-25 19:16:54

お礼

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

投稿日時 - 2011-09-10 10:11:14

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

スクリプトの先頭に #!/bin/awk -f --dump-variables と書いていて、スクリプト名だけで実行しているとすると、先頭行のオプションは1つしか効かないので、--dump-variables は無視されます。つまり、
#!/bin/awk -f --dump-variables と書いても、#!/bin/awk -f と書いても同じ動作です。

そのオプションを使いたかったら、シェルのコマンドラインから
awk --dump-variables -f ファイル名
ですね。

デバッグでの効果については、過度の期待は禁物です。スクリプトを見直す方がずっと効果的です。

投稿日時 - 2011-08-25 21:42:05

ANo.1

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


ところで何故、AWK? Perlは使わないですか?
まぁ~Perlでも、デバック環境ないですが ^ ^;

投稿日時 - 2011-08-25 12:27:37

あなたにオススメの質問