プログラムが 140 文字以内かどうか?

プログラムが140文字以内かをチェックするプログラム - みずぴー日記 にインスパイヤされて、同じプログラムを awk で作ってみます。 プログラム自体は簡単ですが、awk は改行のバイト数を取得できないとか、マルチバイト文字がうまく処理できないといった問題点を抱えているので、以下のようにしてみました。

  • 改行は 1 byte とカウントする。
  • 日本語などのマルチバイトは無視する。

結果として以下のようなものになります。

{
    sum += length($0) + 1;
}

END {
    if (sum <= 140) {
        print "OK(" sum ")";
    } else {
        print "NG(" sum ")";
    }
}

さて、実行してみます。

$ nawk -f byte_checker.awk byte_checker.awk
OK(139)

$ wc -c byte_checker.awk
139 byte_checker.awk

単に ASCII だけの文字であれば問題なく動作するようです。 gawk, xgawk は『文字単位』で扱いますが、他の awk では『バイト単位』で扱うため ASCII 以外では期待通りに動作しないかもしれません。

tag_nawk.png tag_nawk.png tag_nawk.png tag_nawk.png