运行我的 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
我注意到我的行数从file
40058 增加到 44156。这是有原因的吗?
有什么办法可以保持原来的行数吗?
答案1
每当
(FNR in a) && gsub(/\<Source Term\>/,"& Target Term")
计算结果为非零,IE FNR
是 ina
并且替换至少替换一个子字符串,则输出当前行,因为默认操作是{ print }
.
然后
1
导致在所有情况下都输出当前行(依赖于相同的默认操作)。
这意味着子字符串被替换的行将输出两次。
将gsub
调用放在块中可以避免这种情况:
FNR in a { gsub(/\<Source Term\>/,"& Target Term") }