1 awk正規表現の日本語対応
Ubuntu PCに保存したテキストファイルの中から、正規表現を使って、必要とするデータだけを取り出すawkを実行しました。
そうすると、半角英数字が入ったフィールドでの抽出は成功するのに、全角日本語のフィールドでは失敗します。
生成AIで調べると、awk正規表現が日本語などのマルチバイト文字に対応してないから、という回答でした。それが、2025年9月17日付けの「awk正規表現の日本語対応」という記事です。

2 あきらめようとしていたら…
ならば仕方ない、日本語を対象とするawk正規表現検索はあきらめよう、としていたところ、narkejpさんという方がコメントをくださいました。narkejpさんには、これまでも幾度か助けていただきましたが、今回もまた、大変貴重な助言をいただきました。
「日本語を扱うには gawk が適しており、これをインストールして使ってみればいかが?」というコメントでした。
3 Ubuntu環境を調査
そこで、現在使っている Ubuntu 24.04 LTS に入っている awk を調べてみました。まず、$ awk -W version を実行しました。すると、mawkのバージョンが表示されました。
では、mawkしか入っていないのか、mawkもgawkも、両方とも入っていることはないのか、気になります。というのも、Ubuntuの前バージョン 22.04 LTSでは、デフォルトで両方とも入っていましたから。これを調べるために、whichコマンドを実行しました。whichコマンドは、指定されたコマンドをサーチパスから探し、見つかれば、その実行ファイルのフルパスを表示します。何もオプションを付けないと、見つかった最初のコマンドだけを表示するところ、-aオプションを付けることで、すべての実行ファイルの場所を示してくれます。もし、対象コマンドがない環境では何の反応もないので、それで判断できます(コマンドが入っていても、サーチパスに登録されていないと同じく反応がありませんが、まぁ、稀有な事例)。
んで、$ which -a mawk と、 $ which -a gawk の両方を実行しました。そうすると、 mawkはその実行ファイルの場所を示し、一方gawk については、反応がありません。つまり、gawkはインストールされていないことが分かりました。
4 gawkのインストール
gawkが入っていないと分かれば、インストールです。
$ sudo apt update
$ sudo apt install gawk
を実行しました。
これで、インストールができました。
5 awkの実行
mawkとgawkの両方とも入っている状態なので、awkの入力でgawkが実行されるように、切り替え作業が必要かもしれない、と思っていました。
けれども、$ ls -l /bin/awk で調べると、/etc/alternatives/awkへのシンボリックリンクになっており、
さらに、$ ls -l /etc/alternatives/awk で調べると、/usr/bin/gawkへのシンボリックリンクとなっていました。
つまり、切り替え不要のようです。gawkのインストールで、デフォルトでgawkが動作するよう、自動的に設定されました。
6 awk正規表現の日本語対応
さて、gawkが動作するようになったところで、awk正規表現の日本語対応がどうなるか? ・・・ここが肝心です。
はい、ありがとうございます。やりました。narkejpさんのアドバイスどおり、日本語正規表現が動作するようになりました。
具体的には、「/めい.んてい/」のパターン指定が、「めいたんてい」にマッチするようになりました。
生成AIに質問したら、次のように解説します。
gawkは、実行環境のロケール設定(例えばja_JP.UTF-8など)を読み込み、それに従って文字の扱いを変えます。このロケール情報により、UTF-8でエンコードされた日本語の各文字を1つの文字として認識できます。また、gawkの内部エンジンは、マルチバイト文字をバイトの集まりとしてではなく、文字として認識し、処理します。一方、mawkは、正規表現の処理をバイト単位で行います。簡単に言うと、gawkは「文字」を認識し、mawkは「バイト」を認識します。
7 まとめ
awk正規表現で、日本語を扱えるかどうかは、とても大きな問題です。Ubuntu24.04 LTS 環境において、awkの日本語周りに変な挙動が見られるときには、インストールされている処理系(mawk か gawk か)を疑うといいと思います。
それでは、また次の記事で。
goosyun
