wc -w by awk2011年05月02日 20時55分12秒

以前にファイルの行数を数える wc -l を awk で実装した。今度は、ファイルの単語数を数える wc -w を awk で実装する。

awk の処理の基本は、入力行を一行ずつ処理すること。一行読まれる毎に、一行の中のトークンの数が NF に保持される。これを全部足せば、ファイルの単語数になる。


% wc -w /etc/services
    9487 /etc/services
% awk '{w+=NF}END{print w}' /etc/services
9487

awk の変数は他の多数のスクリプト言語と同様に型宣言が無い。awk が扱う型は、数字型と文字列型のみの二種類になる。文字列か、数字かは式によって決定される。変数の初期値は空文字か 0 になっている。スコープは関数の引数以外は全て広域変数になる。その為、大型の awk スクリプトだと変数名が衝突してしまう事も起きやすい。

上では、変数 w に書く行の単語数を += で随時数字として足していく。そして、全ての行の処理が終わったら、値を出力する。

今回の要点。

  1. NF
  2. awk 変数