GNU awkの使用

GNU awkの使用

Bashには$0スクリプト名がありますが、awkは次の内容でmyscript.awkというスクリプトを生成します。

#!/usr/bin/awk -f
BEGIN{ print ARGV[0] }

実行すると、「awk」のみが印刷されます。また、i> 0のARGV [i]は、コマンドラインのスクリプト引数にのみ使用されます。それでは、スクリプト名(この場合は「myscript.awk」)を印刷するにはどうすればよいですか?

ベストアンサー1

CygwinのbashでGNU awk 4.1.3を使用する:

$ cat tst.sh
#!/bin/awk -f
BEGIN { print "Executing:", ENVIRON["_"] }

$ ./tst.sh
Executing: ./tst.sh

携帯性がどれほど良いのか全く知らなかった。しかし、いつものように、awkスクリプトを実行するためにシェルスクリプトでshebangを使用するわけではありません。なぜなら、これは可能な機能を奪うだけだからです。簡単に次のようにしてください。

$ cat tst2.sh
awk -v cmd="$0" '
BEGIN { print "Executing:", cmd }
' "$@"

$ ./tst2.sh
Executing: ./tst2.sh

最後は、すべてのプラットフォームのすべてのシェルで最新のawkで動作します。

おすすめ記事