はじめに
次期 POSIX (Issue 8、2022 年後期予定)で標準化される awk の機能は delete array
、nextfile
ステートメント、fflush()
関数の 3 つです。
あれ?今まで使えなかったの?と思う人も多いと思います。はい、いずれもほとんどの環境ですでに使える機能なのであえて新機能とは呼びません。というよりすでに多くの実装で使えるから POSIX で標準化されるわけです。(POSIX は仕様ができてから実装されるという流れではなく、多くの実装が登場して移植性があると認められたものを標準化するという流れなのでお間違えなきよう)
ついでにどのバージョンから使えるようになっているのかを確認しました。見出しのカッコの中の日付は、これらの変更が提案された日付です。
補足 Solaris 10/11 の /bin/awk
は歴史的な awk なので関数すら使えません。original-awk
は nawk
(BWK awk , One True awk) のことで、macOS の /usr/bin/awk
も nawk
です。Debian 2.2 より前の環境は調査していないのでそれよりも古いバージョンから使える可能性が高いです。
delete array (2012-02-18)
At least gawk, mawk, BWK awk, Solaris /usr/xpg4/bin/awk, and BusyBox awk
私の調査
- gawk 3.0.4 (Debian 2.2) ・・・ YES
- mawk 1.3.3 (Debian 2.2) ・・・ YES
- origian-awk 20000525 (Debian 2.2) ・・・ YES
- Busybox awk 1.1.3 (Debian 4.0) ・・・ YES
- /usr/xpg4/bin/awk (Solaris 10/11) ・・・ YES
nextfile (2012-09-14)
The nextfile statement is supported by the vast majority of current awk implementations, specifically:
- BWK awk 20070501
- gawk 3.1.7
- mawk 1.3.4
- BusyBox awk 1.15.1
- awka 0.7.5
- QSE awk 0.5.6
Support is notably absent from:
- Solaris 10 /usr/xpg4/bin/awk
- jawk 1.02
私の調査
- gawk 3.0.4 (Debian 2.2) ・・・ YES
- mawk 1.3.3 (Debian 2.2 - 10) ・・・ NO
- mawk 1.3.4 20200120 (Debian 11) ・・・ YES
- origian-awk 20000525 (Debian 2.2) ・・・ YES
- Busybox awk 1.1.3 (Debian 4.0) ・・・ YES
- /usr/xpg4/bin/awk (Solaris 10/11) ・・・ NO
fflush (2012-12-04)
fflush() is a useful extension that has long been available in the most versions of awk, and is implemented in at least the following modern versions:
- gawk 4.0.1
- mawk 1.3.4-20121129
- BWK awk 20110810
- BusyBox 1.20.2 awk
- awka 0.7.5
It is absent from:
- jawk 1.02
- AIX 7.1 /usr/bin/awk
- HP-UX 11i v2 /usr/bin/awk
- Solaris 10 /usr/xpg4/bin/awk
私の調査
- gawk 3.0.4 (Debian 2.2) ・・・ YES
- mawk 1.3.3 (Debian 2.2) ・・・ YES
- origian-awk 20000525 (Debian 2.2) ・・・ YES
- Busybox awk 1.1.3 (Debian 4.0) ・・・ YES
- /usr/xpg4/bin/awk (Solaris 10/11) ・・・ NO
まとめ
-
delete array
はほとんどの環境で問題なく使えそうです。 -
nextfile
は mawk が新しい環境でないと使えないかもしれません。UNIX (macOS は除く)は使えない可能性があります。 -
fflush()
は UNIX (macOS を除く)は使えない可能性があります。
nextfile
は mawk の場合に少し注意が必要そうですけど、それ以外はほぼ問題なく使えそうです(macOS 以外の UNIX を除く)。mawk の nextfile
も Debian に搭載されるのが遅かっただけで CHANGES を見る限り 1.3.4 20120627 には実装されてるようです(delete array
と fflush()
は 1996 年の 1.2 の時点ですでに対応済み)。