AWK 命令执行无误,但未修改文件

AWK 命令执行无误,但未修改文件

我正在对一个文件应用 awk 命令,但该文件没有修改。有人能解释为什么会发生这种情况吗?

awk 'BEGIN{FS=OFS=""}; {if($692=="6") sub($690,"9");print $0;}' abc.txt >efg.txt

注意:每行大约有1000个字符。

答案1

怎么了

关键问题是您使用sub()不当。sub()应该根据模式匹配进行替换(这是最重要的部分!)。正确的语法是:

sub(regular_expression,replacement,substring)

您正在做的事情是sub($692,"9"),所以您告诉它替换您在字段编号 692 中看到的相同内容的第一次出现,但该第一次出现可能在该行的前面很远的地方。

以下是一个例子:

$ echo "1253456" | awk 'BEGIN{FS=OFS=""};{if($4==3) sub($6,"@");print}'                                                                               
12@3456

这实际上是获取第 6 个字段(即数字 5)中的所有内容,并删除该内容的第一次出现。与您的命令执行的操作相同。

应该怎么做

要替换特定字段,您不需要sub(),只需直接分配给该字段。

awk 'BEGIN{FS=OFS=""}; {if($692==6) $690="9";print}' abc.txt >efg.txt

请注意,我还删除了$0print因为调用print本身已经默认$0假设

相关内容