Bash

在 AWK 之後,行數增加了

  • January 31, 2022

執行我的 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。這是有原因的嗎?

有什麼辦法可以保持原來的行數嗎?

每當

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

計算結果為非零, FNRina並且替換替換了至少一個子字元串,輸出目前行,因為預設操作是{ print }.

然後

1

導致在所有情況下都輸出目前行(依賴於相同的預設操作)。

這意味著子字元串被替換的行被輸出兩次。

gsub呼叫放在塊中將避免這種情況:

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

引用自:https://unix.stackexchange.com/questions/688665