我不确定我是否在 Gawk 中发现了错误,或者我是否误读/遗漏了 页面中的某些gawk
内容man
。
根据gawk
的man
页面,在兼容模式下,如果RS
包含多个字符,则仅将第一个字符视为输入记录分隔符:
记录
通常,记录由换行符分隔。您可以通过为内置变量赋值来控制记录的分隔方式RS
。如果RS
是任何单个字符,该字符分隔记录。否则,RS
是一个正则表达式。输入中与此正则表达式匹配的文本分隔记录。但是,在兼容模式下,仅使用其字符串值的第一个字符来分隔记录。如果RS
设置为空字符串,然后记录由空行分隔。什么时候RS
设置为空字符串,除了任何值之外,换行符始终充当字段分隔符FS
可能有。
因此,在运行时gawk -P -- '1' RS="bar" <<<'foobarfoo'
,我期望得到以下结果(请注意,每个页面-P
都打开兼容模式):gawk
man
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
按照问题中的描述进行处理,即与文档不同。