The first week of October, Arnold Robbins announced Beta release of gawk 4.2.0 now available in the GNU-announce, bug-gawk and comp.lang.awk https://groups.google.com/forum/#!topic/comp.lang.awk/UnoZTItfiko mailing lists. It is available in http://www.skeeve.com/gawk/gawk-4.1.65.tar.gz http://www.skeeve.com/gawk/gawk-4.1.65.tar.gz 1 and he mentions that This is a major release, with many significant new features.
因此,我浏览了 NEWS 文件来深入研究这些功能,并在此时停下来进行一些测试:
从 4.1.4 到 4.2.0 的变化
...
- POSIX 标准的修订删除了 POSIX 的特殊情况
当 FS = " " 时的模式,其中换行符不是字段分隔符。代码
和文档已更新。
如果我理解正确的话,他谈论的是GNU Awk 用户指南 → 4.5.2 使用正则表达式分隔字段 https://www.gnu.org/software/gawk/manual/html_node/Regexp-Field-Splitting.html:
'FS = " "'(单个空格)和 'FS = "[ \t\n]+"'(匹配一个或多个空格、制表符或换行符的正则表达式)这两种情况之间存在重要区别。对于 FS 的两个值,字段由空格、制表符和/或换行符的运行(多个相邻出现)分隔。然而,当 FS 的值为“”时,awk 首先从记录中去除前导和尾随空白,然后决定字段的位置。
也就是说,使用之间的区别FS = " "
and FS = "[ \t\n]+"
.
我运行了新版本并进行了测试--posix https://www.gnu.org/software/gawk/manual/html_node/Options.html mode:
$ ./gawk --posix -F" " '{print "NR:", NR; for(i=1;i<=NF;i++) print i, $i}' <<< "hello how are
you"
NR: 1
1 hello
2 how
3 are
NR: 2
1 you
和我之前的 awk (4.1.3) 相比并看不出有什么区别:
$ gawk --posix -F" " '{print "NR:", NR; for(i=1;i<=NF;i++) print i, $i}' <<< "hello how are
you"
NR: 1
1 hello
2 how
3 are
NR: 2
1 you
总而言之,我的问题是:行为有什么不同FS = " "
in the --posix
GNU Awk 4.2 的模式?具体改变了什么?
1 yes, I also thought it should be 4.2.tar.gz
, but http://www.skeeve.com/gawk/gawk-4.2.tar.gz http://www.skeeve.com/gawk/gawk-4.2.tar.gz does not exist