0 〜 1000 に含まれる 0 をカウントする

awk は型を自動的に判別してくれるため、その変数が数値なのか文字列なのかをあまり意識することなくプログラミングできます。 ところが、場合によっては、これが仇となる場合もありますが、そうした場合には故意に型を変えることで対応します。

0〜1000に含まれる0をカウントするを例に取ってみます。 もちろん、awk の場合は全く異なる手法で構成する必要があります。 ここでは、数値に空文字列の連接を行うことで文字列に変換し、それを gsub() でカウントします。

#! /usr/bin/gawk -f
# count_zero.awk

BEGIN {
    for (i = 0; i <= 1000; i++) {
        str = i "";
        count += gsub(/0/, "", str);
    }
    print count;
}

本来であれば gsub() 関数の第 3 引数に i "" のように記述したいところですが、gsub() 関数の第 3 引数は可変オブジェクトではありません。 そのため、上記のようにしています。

実行してみます。

$ gawk -f count_zero.awk
193

awk では C 言語のように型をあらかじめ決めておくことはできませんが、このようにして型を変更することができます。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png