awk - 为什么对 $0 的更改不强制重建输出记录

awk - Why doesn't a change to $0 force reconstruction of the output record

这是对此处处理的问题和数据的后续

根据这个答案,我想出了以下解决方案

BEGIN {RS="\n-+\n"; FS="\n";OFS="\t"}
  NF > 1 {sub(/^MV: /,""); print}

然而这并没有奏效,因为指定的 OFS 没有生效。当然 sub 的默认行为是更改 $0 并且似乎不会触发记录重建(或触发新 OFS 所需的任何内容)。

如果我将其更改为在子命令中指定 $1,它确实有效

BEGIN {RS="\n-+\n"; FS="\n";OFS="\t"}
  NF > 1 {sub(/^MV: /,"",); print}

这就像在问 "why doesn't index([=18=],3) return a substring of [=18=] starting at character 3?"。答案很简单——因为这不是语言的定义方式。

分配给一个字段(例如 $1)重建记录,用 OFS 替换 FS。

分配给 $0 使用 FS 将记录重新拆分为字段。

就这些了。