作者: 藤岡和夫
日時: 2005/1/17(21:22)
On Mon, 17 Jan 2005 00:23:06 +0900
"Bruce." <kbk@...> さんwrote:

> やってみました。
> 
> http://www.kt.rim.or.jp/%7ekbk/gawk-3.1/gawk-3.1.4-cygwin.zip
> 
> e9c4dbbe836fede5360957cd9a60f2fb *gawk-3.1.4-cygwin.zip
> 
> です。注意事項として、マルチバイト文字に対応させる場合、VC++版のように
> コマンドラインオプションでは指定しません。環境変数 LC_CTYPE (LC_ALLや
> LANGではありませんので注意)にC-SJIS, S-EUCJP, C-UTF-8を設定した後実行
> します。この指定内容も GNU/Linuxで使われいる形式とは違うので注意が必要
> です。
> 
> とりあえず C-SJISの設定で、index()が期待通りに動いていることと、'\'を
> 2バイト目に含むマルチバイト文字で誤動作しないことを確認しています。
> 

 早速ありがとうございます。いただきました。インターネットへのアクセスは
問題なく動きました。しかし、正規表現のパターンマッチ、length、indexはい
ずれも元のままのような(^^;)キャラクタ単位ではなく、バイト単位で数えてい
ます。

----^ hello.awk
BEGIN{
	print "Hello world"
	print "ハローワールド"
}
#/ハロー/{print}
/Hello/{print}
{print $0 ":length=" length($0)}
{print $0 ":index=" index($0, "ロ")}
-----$

 コメント行を生かすと、

$ gawk -f hello.awk hello.awk
gawk: hello.awk:5: /ハロー/{print}
gawk: hello.awk:5:  ^ unterminated regexp
gawk: hello.awk:5: fatal: Unmatched [ or [^: /ハロー/{print}/

となります。

 コメントにしたままだと、

$ echo $LC_CTYPE
C-SJIS

$ gawk -f hello.awk hello.awk
Hello world
ハローワールド
BEGIN{:length=6
BEGIN{:index=0
        print "Hello world"
        print "Hello world":length=20
        print "Hello world":index=0
        print "ハローワールド":length=23
        print "ハローワールド":index=11
}:length=1
}:index=0
#/ハロー/{print}:length=16
#/ハロー/{print}:index=5
/Hello/{print}
/Hello/{print}:length=14
/Hello/{print}:index=0
{print $0 ":length=" length($0)}:length=32
{print $0 ":length=" length($0)}:index=0
{print $0 ":index=" index($0, "ロ")}:length=36
{print $0 ":index=" index($0, "ロ")}:index=32

$ gawk --version
GNU Awk 3.1.4 + unofficial multibyte patch #2

藤岡 和夫
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/