AWK之后行数增加了

AWK之后行数增加了

运行我的 AWK 脚本后

awk -i inplace '(NR==FNR){a[$1];next}
    (FNR in a) && gsub(/\<Source Term\>/,"& Target Term")
     1
    ' <(shuf -n 198058 -i 1-$(wc -l < file)) file

file用命令检查后

wc -l file

我注意到我的行数从file40058 增加到 44156。这是有原因的吗?

有什么办法可以保持原来的行数吗?

答案1

每当

(FNR in a) && gsub(/\<Source Term\>/,"& Target Term")

计算结果为非零,IE FNR是 ina并且替换至少替换一个子字符串,则输出当前行,因为默认操作是{ print }.

然后

1

导致在所有情况下都输出当前行(依赖于相同的默认操作)。

这意味着子字符串被替换的行将输出两次。

gsub调用放在块中可以避免这种情况:

FNR in a { gsub(/\<Source Term\>/,"& Target Term") }

相关内容