awk-为什么不';t更改为$0强制重建输出记录

awk-为什么不';t更改为$0强制重建输出记录,awk,Awk,这是本文所讨论问题和数据的后续部分 根据这个答案,我提出了以下解决方案 BEGIN {RS="\n-+\n"; FS="\n";OFS="\t"} NF > 1 {sub(/^MV: /,""); print} 但是,由于指定的OFS未生效,因此这不起作用。当然,sub的默认行为是更改$0,这似乎不会触发记录重建(或者触发新OFS所需的任何操作) 如果我在sub命令中将其更改为指定$1,则它确实有效 BEGIN {RS="\n-+\n"; FS="\n";OFS="\t"} N

这是本文所讨论问题和数据的后续部分

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

BEGIN {RS="\n-+\n"; FS="\n";OFS="\t"}
  NF > 1 {sub(/^MV: /,""); print}
但是,由于指定的OFS未生效,因此这不起作用。当然,sub的默认行为是更改$0,这似乎不会触发记录重建(或者触发新OFS所需的任何操作)

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

BEGIN {RS="\n-+\n"; FS="\n";OFS="\t"}
  NF > 1 {sub(/^MV: /,"",$1); print}
这就像问“为什么索引($0,3)不返回从字符3开始的$0子字符串?”。答案很简单——因为这不是语言的定义方式

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

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

就这些