为什么 Gawk 在兼容模式下以与启用 GNU 扩展时相同的方式分割记录?

为什么 Gawk 在兼容模式下以与启用 GNU 扩展时相同的方式分割记录?

我不确定我是否在 Gawk 中发现了错误,或者我是否误读/遗漏了 页面中的某些gawk内容man

根据gawkman页面,在兼容模式下,如果RS包含多个字符,则仅将第一个字符视为输入记录分隔符:

记录
通常,记录由换行符分隔。您可以通过为内置变量赋值来控制记录的分隔方式 RS。如果RS是任何单个字符,该字符分隔记录。否则,RS是一个正则表达式。输入中与此正则表达式匹配的文本分隔记录。但是,在兼容模式下,仅使用其字符串值的第一个字符来分隔记录。如果RS设置为空字符串,然后记录由空行分隔。什么时候RS设置为空字符串,除了任何值之外,换行符始终充当字段分隔符FS可能有。

因此,在运行时gawk -P -- '1' RS="bar" <<<'foobarfoo',我期望得到以下结果(请注意,每个页面-P都打开兼容模式):gawkman

foo
arfoo

但是,如果我运行它:

% gawk -P -- '1' RS="bar" <<<'foobarfoo' 
foo
foo

即使显式打开兼容模式也会发生同样的情况:

% gawk -c '1' RS="bar" <<<'foobarfoo'
foo
foo

显然,在兼容模式下,Gawk 实际上以与启用 GNU 扩展时相同的方式分割记录。我缺少什么?

这是在 Linux 上(Ubuntu 16.04 64 位,Gawk 版本:)GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)

答案1

由于文档相当明确,我只需提交一份错误报告。

与 BWK 相比 (一个真正的 awk或者原始awk),它的行为如文档所暗示的那样。如果 gawk 的开发人员对此细节有其他一些参考实现,则应该将其记录下来。

测试 gawk 的-c(兼容模式),它RS按照问题中的描述进行处理,即与文档不同。

相关内容