つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

ごく短い空白行削除awkプログラム

 あるところで、とてもおもしろいawkプログラムを見かけました。次のコードです。
   $ awk 'NF' data.txt
 コードとしてはたったこれだけです。ごくごく短いプログラムです。
 これがどういう動きをするのか、想像つきますか?
 実はこれは、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