在未来的POSIX(第8版)中标准化的awk功能包括 delete array,nextfile,fflush()
首先
下一版本的 POSIX(第8版,预计在2022年下半年发布)中将会标准化 awk 的功能,其中包括三个功能:删除数组(delete array)、下一个文件(nextfile)语句以及刷新(fflush())函数。
嗯?你以前不能用吗?我认为很多人都会这样想。是的,在大多数环境中,这些功能已经可以使用,所以不需要刻意称之为新功能。事实上,它们已经可以在许多实现中使用,并且被POSIX标准化。(POSIX的标准化过程并不是先制定规范,再去实现,而是在出现许多实现并被认为具有可移植性之后,进行标准化的过程,所以请不要弄混了。)
我查看了哪个版本开始可以使用,顺便确认了括号中的日期是这些变更的提案日期。
原生的中文释义:由于 Solaris 10/11 的 /bin/awk 是历史版本的 awk,所以甚至连函数都无法使用。原始的 awk 是指 nawk (BWK awk,One True awk),而 macOS 的 /usr/bin/awk 也是 nawk。我没有调查过 Debian 2.2 以前的环境,所以可能有更旧版本的 awk 可用。
One possible paraphrase in Chinese:
由于 Solaris 10/11 的 /bin/awk 是历史版本的 awk,因此连函数也无法使用。原始的 awk 是指 nawk (BWK awk,One True awk),而 macOS 的 /usr/bin/awk 也是 nawk。我没有对 Debian 2.2 以前的环境进行调查,所以可能有更旧版本的 awk 可供使用。
删除数组(2012年2月18日)
至少有gawk、mawk、BWK awk、Solaris /usr/xpg4/bin/awk和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
下一个文件(2012年9月14日)
下一条文件语句得到了几乎所有当前awk实现支持,具体如下:
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值得注意的是,以下平台没有提供支持:
* 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
刷新缓冲区(2012年12月4日)
fflush()是一种有用的扩展,长期以来在大多数awk版本中都可用,并且至少在以下现代版本中实现:
gawk 4.0.1
mawk 1.3.4-20121129
BWK awk 20110810
BusyBox 1.20.2 awk
awka 0.7.5它在以下版本中不可用:
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 を除く)は使えない可能性があります。
mawk 除外,其他情况下似乎可以毫无问题地使用 nextfile(除了 macOS 之外的 UNIX)。根据 CHANGES 来看,mawk 的 nextfile 实现似乎是在 1.3.4 20120627 版本中,只是它在 Debian 上的部署较晚(删除数组和 fflush() 在 1996 年的 1.2 版本中已经支持)。