wc -c by awk2011年05月05日 11時15分47秒

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

繰り返すが awk の処理の基本は、入力行を一行ずつ処理すること。-w では一行読まれる毎に、一行の中の単語の数の NF 加算していった。今度は各行の文字数を足していく必要がある。awk には length( str ) という組み込み関数がある。渡した文字列の長さを返す。


% wc -c /etc/services
   83034 /etc/services
% awk '{ c+=length($0) }END{print c + NR}' /etc/services
83034

$0 は入力行全体を指す。そのため、length($0) は入力行の文字数になる。しかし、改行文字は、切り落とされるので最終的には、ファイルの行数分だけ文字数が減ってしまう。それを END 句で足す。

今回の要点。

  1. $0
  2. length()