パソコン悪戦苦闘記録

同じUbuntuなのにawk処理系が異なる~mawkとgawk

 今、PCでのテキスト処理ツールawk(オーク)を学習している途中です。
 awkは、使いこなせるようになるとなかなか便利なツールです(こんなに年をとってからではなく、若いころに出会っていればよかった・・・・。)。





 awkは、一つのプログラミング言語とも言えるほどの機能を持ちます。
 また、いろんな改良(拡張)がされて、いくつかの種類(派生版)があります。

 代表的なものだけでも、
1 awk(元祖AWK)
2 nawk(New AWK)
3 gawk(GNU AWK)
4 mawk(Mike Brennan作のAWK)
があります。

 「種類」とか「派生」という上記のような呼び方ではなく、専門的には、「実装」とか「処理系」などと、日常的にはあまり使われない用語で呼ばれています。

 デフォルトの awk として、
  1 Debian 系では mawkが、
  2 RedHat 系では gawk
それぞれ採用されています。
 また、macOS や BSD 系でデフォルトでインストールされているのは nawk のようです。

 どの処理系がインストールされているかの確認には、バージョンを見分けるためのコマンドを使います。
  「awk --version
とか、
  「awk -W version
というコマンドを打ち込むと、
バージョンが分かると同時に、どのawk処理系が入っているのかを把握できます。

 下の画像をご覧ください。
 ターミナルを起動して、awkのバージョンを確認するコマンドを実行した結果を、スクリーンショットした図です。



 上に掲載の図のように、バージョン確認の実行により、このPCにインストールされているawkの処理系は、「mawk」であることが分かります。


 我が家にはたくさんのPCがありますが、そのうち、計2台のノートPCにLinuxをインストールしています。
 その2台のPCに入れているLinuxの環境と、ディストリビューションは、
1台の方が、
   Oracle VM VirtualBox 上に
   Ubuntu 22.04LTS

もう片方は、
   WSL(Windows Subsystem for Linux)2 上に
   Ubuntu 22.04LTS

です。

 その2台のPCに入っているawkのバージョンを調べていて、ちょっとした発見がありました。処理系の違いです。
 上記2台のPCにインストールしているLinuxは、どちらも(2台とも)Debian系であるUbuntuです。バージョンの違いもありません。
 そのどちらもDebian系なので、インストールされているawkも、同じ処理系「mawk」と思っていました。

 ところが、実際に確認してみると、これが違っていたんですねぇ。
 VirtualBox 上のUbuntu には、「mawk
 WSL2 上のUbuntuには、「gawk
が、それぞれ入っていました。

 「へぇ~、同じUbuntuなのに違うんだ。」っていう、ちょっとした発見です。
 gawkの方が高機能なのに対し、処理速度で勝るのはmawkの方です(2倍の速度差と言われています。)。

 おそらく、WSL2を通じてインストールしたUbuntuの「gawk」の方が変則的だと思われます。Ubuntuには、原則的にはmawkが入ることになっている、・・・はずだからです。

 そうすると、今後、
  「両者で挙動が違う(こともある)のを前提にして、利用することになるのかなぁ。」
・・・なんて考えているところです。


プログラミング言語AWK 第2版
◆ awk作者の手によるawk基本書《第2版》

それでは、また次の記事で
goosyun

コメント一覧

goosyun
narkejp さん
 この週末、改めて調べてみたところ、
VirtualBoxに入っているUbuntu、それからWSLに入っているUbuntu、どちらにも、mawk と gawk の両方が入っていました。初めて知りました。
 これで、またちょっとだけ awk に関して賢くなりました。

 そうすると、narkejp さんの推測されるとおり、どんな環境下であるかによってリンクが違ってくるのかもしれません。これは、今後の研究課題です。
goosyun
narkejp さん
 いつも、有益なコメント、ありがとうございます。
 私のPCにも、
  mawk
  gawk
の両方が入っている可能性がありそうです。
 週末、じっくり調べてみます。
narkejp
面白いですね。私の Ubuntu 20.04LTS で調べてみました。
$ awk --version
としてみると、gawk のバージョンを返しました。念のために /usr/bin/gawk と /usr/bin/mawk を調べてみると、どちらも入っているようです。
$ /usr/bin/mawk -W version
としてみると、ちゃんと mawk のバージョンを返しました。
要するに両方入っていて、どんな環境下であるかによってリンクが違っているのではないかと思います。なんとなく、メモリ等の条件が厳しくなりそうな WSL 上では、コンパクトな mawk へのリンクが選ばれているのではと思いますが、さて真相は?
実際には、フル機能の gawk とコンパクトな mawk の違いを実感したことはありません。天文学のデータなど大量の処理では違いが出てくるのかもしれませんが、私の使い方だと基本的にデータを読んでは処理し、また読んでは処理し、という動作ですので、両者の違いが表面化することはなく、両方の awk の共通性に恩恵を感じるばかりです。
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「Ubuntu」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事