AWKで特定の条件に一致する行数をカウントする

BEGINとENDを使えば、特定条件に一致した行をカウントするのも比較的楽にできます。

BEGIN { count = 0 } 
$1 % 3 == 0 && $1 % 5 == 0 { count = count+1 } 
END   { print "I found " count " fizzbuzz numbers. :)" }

てなファイルを用意した上で

$ seq 1 100 | awk -f test.awk 

とやれば、fizzbuzzに対応する数値の個数がでてきます。

処理には正規表現も使える上、-Fオプションで切り出した要素毎に指定もできます。
なので

  • 2番目のカラムが偶数
  • 4番目のカラムに特定の文字列が含まれる
  • 5番目のカラムは3で割り切れる

といった複合条件にも対応しやすいという利点があります。