awk の更なる実験2006年11月30日 11時16分45秒

前回に続き、複数のプログラムを組み合わせて使う実験。Makefile やシェルスクリプトから使い回すのに、分割できればコードの再利用が出来そうな事が多い。しかし、いちいち一行、二行のプログラムをファイルに書くのに疲れたためだ。

今回は、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 に依存しても構わないのなら、コマンドラインからでも複数のプログラムを渡せそうだ。

前回