あるところで、とてもおもしろいawkプログラムを見かけました。次のコードです。
$ awk 'NF' data.txt
コードとしてはたったこれだけです。ごくごく短いプログラムです。
これがどういう動きをするのか、想像つきますか?
実はこれは、data.txt から空白行を取り除いて、データだけを出力してくれるプログラムです。
data.txt は、下図のように入力された、空白行混じりのテキストファイルです。

上記テキストファイルを対象にして、$ awk 'NF' data.txt を実行すると、空白行が取り除かれて、次のように出力されます。
【awk 'NF' の実行結果】
1 hagehage 1234 gaasyun
2 higehige 2345 giisyun
3 hugehuge 3456 guusyun
4 hegehege 4567 geesyun
5 hogehoge 5678 goosyun
awk のプログラムは、'パターン{アクション}' という形で記述します。このパターンには式を記述できます。そして、その式の結果が、数値の0か空文字の場合、awkは偽と評価します(数値の非ゼロか非空文字だと、真と評価)。
空白行はフィールドが一つもないので、組み込み変数 NF は「0(ゼロ)」です。よって、偽と評価され、その行に対しては、アクション print $0 が実行されません。逆に、空白行でない限り、NF は非ゼロだから、print $0 が実行されます。
この結果、 awk 'NF' という記述だけで空白行が取り除かれ、データだけ出力されます。ねっ、おもしろいですよね。
それではまた次の記事で。
goosyun
