awkでUTF-8文字を扱ったときの正規表現系の処理

はじめまして。MAC OS Xのawkについて質問です。
下記の2つのファイルを定義します(漢字はUTF-8)。
=== a.awk ===
{
gsub("元","先",$0)
gsub("F","T",$0)
print $0
}
=== a.txt ===
元先
FT
そこで awk -f a.awk a.txt を実行すると
元先
TT
となってしまします。私の考えでは、
先先
TT
となると思うのですが。。。
これは仕様なのでしょうか?
他の正規表現を扱う関数も同様に漢字の部分が無視されます。
よろしくお願いいたします。

投稿日 2003/05/31 09:45

返信: 5

2003/05/31 10:52 Community User への返信

結果がどうしてそうなるかはわかりませんが、UTF-8とか日本語文字コードとかに対応していないのではないでしょうか?
# 対応版が添付されている気がしないのですが...。

2003/05/31 12:03 Community User への返信

多分「元」を「先」に置き換えようとしたけど「元」が見つからないので
そのまま表示してしまっているということなのだと思います。
日本語対応のawkがあるそうなので、それを入れてみては?
FreeBSD Ports: Japanese
説明にも
This package is multi-byte extented GNU AWK.
Supported multi-byte codes are EUC-JP/Shift_JIS/UTF-8 code.
って書いてあるし。
#・・・JISには対応していないのかな?(^^;)
パッケージはi386版みたいですが、ソース引っ張ってきてmakeすれば
いけるでしょうし。

2003/05/31 18:50 Community User への返信

シェルスクリプト自身やそれが扱うデータファイルの文字コードは EUC にされた方が、やりたい事を進める最善の手段になると思います。
例外は(少し前にこちらでお世話になりましたが) OSX のファイル名を扱う時だと考えられます。

2003/06/01 16:02 Community User への返信

皆さん、アドバイスどうもありがとうございました。
皆さんからの意見
(1) OS Xのawkそのものがマルチバイト未対応なのでは?
(2) 日本語対応のja-gawk-3.0.6を使ってみる。
(3) Finkのgawkを使ってみる。
(4) シェルもスクリプトもEUCに統一する。
(2)の意見より、ja-gawk-3.0.6を
インストールしてみたところ、
こちらでは予想通りの結果となりました。
どうもありがとうございました。
まとめと補足
Mac OS Xのawkではgsubやmatchなどの
正規表現を使う関数はUTF-8の日本語部分未対応、
indexなどの関数は、(たまたま?)問題なく
処理されるようです。
Mac OS Xのperlでは正規表現にUTF-8の日本語部分を使っても
問題はありませんでした。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

awkでUTF-8文字を扱ったときの正規表現系の処理

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。