getline 中の getline
getline 中で getline を使うとどうなるのでしょうか。
ここでは適当な入力ファイルを使います。
$ cat getline_getline.txt 1 2 3 4 5
良く私は getline を使って BEGIN ブロック中で入力を行うことがありますが、comp.lang.awk のドンこと Ed Morton は嫌っています。
例えば以下のような処理で困ります。
$ cat getline_getline.awk #! /usr/local/bin/gawk -f BEGIN { while (getline < ARGV[1] > 0) { getline; print $0; exit; } close(ARGV[1]); }
意図としては 1 行目を飛ばしたいわけですが、getline では飛ばすことができません。
一方以下のようなものは 1 行目を飛ばすことができます。
$ cat getline_getline2.awk #! /usr/local/bin/gawk -f { getline; print $0; exit; }
実際に実行してみましょう。
$ gawk -f getline_getline.awk getline_getline.txt 1 $ gawk -f getline_getline2.awk getline_getline.txt 2
後付け的な getline ですが、使い方ではかなりの効果を発揮しますので、適材適所で使っていきましょう。