今回は、Solaris 上にて実験。
% nawk -f 2 -f 1
2
1
Solaris の nawk でも複数のプログラムを指定することが出来た。
% nawk 'BEGIN{print "1"}' 'BEGIN{print "2"}'
1
% nawk 'BEGIN{print "1"}BEGIN{print "2"}'
1
2
nawk では複数のプログラムを受け付けることは出来ないらしい。しかし、後者のように一つのプログラムであれば、BEGIN 節が複数あるのは構わないらしい。
一応、元祖 awk では同じことが出来ないのを試しておく。
% awk 'BEGIN{print "1"}BEGIN{print "2"}'
awk: syntax error near line 1
awk: bailing out near line 1
案の定だ。
この結果からだと、コマンドラインからのプログラムとファイルからのプログラムを混ぜるのは無理そうだ。一応試してみる。
% awk 'BEGIN{print "1"}' -f 2
1
% nawk 'BEGIN{print "1"}' -f 2
1
% nawk -f 2 'BEGIN{print "1"}'
2
% gawk -f 2 'BEGIN{print "1"}'
2
% gawk 'BEGIN{print "1"}' -f 2
1
その後、man gawk をやったら、以下の記述があった。gawk は環境に依存するのでスクリプトとして、ファイルに書き出してはあまり使わない。gawk を実際に使っていても、GNU 拡張は意図的に避けている。
-W source program-text --source program-text Use program-text as AWK program source code. This option allows the easy intermixing of library functions (used via the -f and --file options) with source code entered on the command line. It is intended primarily for medium to large AWK programs used in shell scripts.
% gawk --source 'BEGIN{print "1"}' -f 2
1
2
確かに、GNU 拡張を使うと、意図したことはできた。GNU awk に依存しても構わないのなら、コマンドラインからでも複数のプログラムを渡せそうだ。
前回。
セコメントをする