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 将记录重新拆分为字段。
就这些了。
这是对此处处理的问题和数据的后续
根据这个答案,我想出了以下解决方案
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 将记录重新拆分为字段。
就这些了。