Debian/Ubuntuでawkを切り替える

Debian等でのインストール直後のawkは mawk が導入されます．
Debianのパッケージでは他にGNU awk(パッケージ名 gawk ), The One True Awk(パッケージ名 original-awk )というものもあります．*BSDなどでよく見る nawk もあるように見えますが，シンボリックリンクだけのようです．
(他にもあるかもしれない?)

mawk は初期状態で入っていて軽量．GNU awk はmawkに比べて多機能で既定値では導入されませんが， byobu などが依存を求めるので入っている人も多いと思います．

複数のawkパッケージが導入されているときに awk と実行したときは update-alternatives で管理されたシンボリックリンク先のいずれかのawkが実行されます．これを切り替えてみます．

Gawk – GNU Project – Free Software Foundation (FSF)

mawk – pattern scanning and text processing language

GitHub – onetrueawk/awk: One true awk

切り替え前の状態です． awk , nawk が gawk(GNU awk) に向いています．

$ ls -l /usr/bin/*awk
lrwxrwxrwx 1 root root 21 May 16 00:33 /usr/bin/awk -> /etc/alternatives/awk
-rwxr-xr-x 1 root root 694624 Feb 10 17:42 /usr/bin/gawk
-rwxr-xr-x 1 root root 158296 Feb 17 2020 /usr/bin/mawk
lrwxrwxrwx 1 root root 22 May 16 00:33 /usr/bin/nawk -> /etc/alternatives/nawk
-rwxr-xr-x 1 root root 135848 Dec 22 06:24 /usr/bin/original-awk
$ ls -l /etc/alternatives/*awk
lrwxrwxrwx 1 root root 13 May 16 04:27 /etc/alternatives/awk -> /usr/bin/gawk
lrwxrwxrwx 1 root root 13 May 16 04:27 /etc/alternatives/nawk -> /usr/bin/gawk

awk コマンドを切り替えてみます．ここでは gawk から mawk にしました．

$ sudo update-alternatives --display awk (1)
awk - auto mode
link best version is /usr/bin/gawk
link currently points to /usr/bin/gawk
link awk is /usr/bin/awk
slave awk.1.gz is /usr/share/man/man1/awk.1.gz
slave nawk is /usr/bin/nawk
slave nawk.1.gz is /usr/share/man/man1/nawk.1.gz
/usr/bin/gawk - priority 10
slave awk.1.gz: /usr/share/man/man1/gawk.1.gz
slave nawk: /usr/bin/gawk
slave nawk.1.gz: /usr/share/man/man1/gawk.1.gz
/usr/bin/mawk - priority 5
slave awk.1.gz: /usr/share/man/man1/mawk.1.gz
slave nawk: /usr/bin/mawk
slave nawk.1.gz: /usr/share/man/man1/mawk.1.gz
/usr/bin/original-awk - priority 0
slave awk.1.gz: /usr/share/man/man1/original-awk.1.gz
$ sudo update-alternatives --config awk (2)
There are 3 choices for the alternative awk (providing /usr/bin/awk).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gawk 10 auto mode
1 /usr/bin/gawk 10 manual mode
2 /usr/bin/mawk 5 manual mode
3 /usr/bin/original-awk 0 manual mode

Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/mawk to provide /usr/bin/awk (awk) in manual mode
$ sudo update-alternatives --set awk /usr/bin/mawk (3)
update-alternatives: using /usr/bin/mawk to provide /usr/bin/awk (awk) in manual mode
$ ls -l /etc/alternatives/*awk (4)
lrwxrwxrwx 1 root root 13 Jun 7 08:27 /etc/alternatives/awk -> /usr/bin/mawk
lrwxrwxrwx 1 root root 13 Jun 7 08:27 /etc/alternatives/nawk -> /usr/bin/mawk

現在の awk の設定を確認． gawk に向いている

対話モードで update-alternatives コマンドを起動して 2 の mawk に設定

コマンドモードの場合

awk , nawk が mawk に向いたのを確認．

切り替えできました．　:)

ちなみに update-alternatives で管理されているコマンドの一覧は以下のコマンドで表示できます．

$ update-alternatives --get-selections

環境1(Debian sid amd64)

$ dpkg-query -W mawk gawk original-awk dpkg
dpkg 1.20.9
gawk 1:5.1.0-1
mawk 1.3.4.20200120-2
original-awk 2018-08-27-1
$ lsb_release -dr
Description: Debian GNU/Linux 11 (bullseye) (1)
Release: 11
$ arch
x86_64

実際はsid

環境2(Ubuntu 21.04 amd64)

$ dpkg-query -W mawk gawk dpkg
dpkg 1.20.9ubuntu1
gawk 1:5.1.0-1build1
mawk 1.3.4.20200120-2
$ lsb_release -dr
Description: Ubuntu 21.04
Release: 21.04
$ arch
x86_64

環境3(Raspberry Pi OS buster armhf)

$ dpkg-query -W mawk gawk dpkg
dpkg 1.19.7
gawk 1:4.2.1+dfsg-1
mawk 1.3.3-17
$ lsb_release -dr
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
$ arch
armv7l