渡辺一寛です。 At Wed, 8 May 2013 17:26:15 +0900, Kouichi Hirabayashi wrote: > > awk(1) との事なので、こちらは one true awk の方だと思います。 > > lang/gawk が GNU awk で /usr/local/bin/gawk になります。 > > gawk でも漢字を含む文字列で index() が正しい結果になりません。
うちの環境 (9.1-RELEASE, LC_CTYPE=ja_JP.eucJP) だとこうなります。 * japanese/gawk $ /usr/local/bin/gawk --version | head -n 1 GNU Awk 3.0.6 + multi-byte extension 1.15 $ /usr/local/bin/gawk 'BEGIN{print index("日本語", "本")}' 3 $ /usr/local/bin/gawk 'BEGIN{print jindex("日本語", "本")}' 3 $ /usr/local/bin/gawk --ctype=EUC 'BEGIN{print index("日本語", "本")}' 3 $ /usr/local/bin/gawk --ctype=EUC 'BEGIN{print jindex("日本語", "本")}' 2 $ ctype を指定した上で "j" の付いた関数を使用すると、文字単位でカウントします。 * システム標準の awk (one true awk == nawk) $ /usr/bin/awk --version awk version 20110810 (FreeBSD) $ /usr/bin/awk 'BEGIN{print index("日本語", "本")}' 3 $ バイト単位で見ているようです。 * lang/gawk $ cd /usr/ports/lang/gawk/work/gawk-4.0.2/ $ ./gawk --version | head -n 1 GNU Awk 4.0.2 $ ./gawk 'BEGIN{print index("日本語", "本")}' 2 $ (unset LC_CTYPE; ./gawk 'BEGIN{print index("日本語", "本")}') 3 $ マルチバイト対応をするかどうかは locale で見ているようです。 # make install すると ja-gawk を上書きしてしまうので、make だけして # コンパイルディレクトリでテストしてます) --- WATANABE Kazuhiro (cqg00...@nifty.ne.jp)