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が実行されます.これを切り替えてみます.

切り替え前の状態です. awk , nawkgawk(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
  1. 現在の awk の設定を確認. gawk に向いている
  2. 対話モードで update-alternatives コマンドを起動して 2mawk に設定
  3. コマンドモードの場合
  4. awk , nawkmawk に向いたのを確認.

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

ちなみに 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
  1. 実際は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

One thought to “Debian/Ubuntuでawkを切り替える”

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です