我不熟悉awk。为了在 198058 随机行中的源术语之后插入单个目标术语,我在此处有此代码
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
包含这样的句子行
David has to eat his vegetables .
This weather is very cold .
Can you please stop this music ? This is terrible music .
The teddy bear is very plushy .
I must be going !
例如,如果我想在“天气”之后插入“Wetter”这个词,那么某行会是这样的
This weather Wetter is very cold .
如何重写代码,所以我只需要包含两个不同的文件,其中包含源术语和目标术语的列表?
假设源术语文件被调用sourceterms
,目标术语文件被调用targetterms
。
如果sourceterms
包含这些术语的列表
vegetables
weather
terrible
plushy
going
并targetterms
包含这些条款
Gemüse
Wetter
schreckliche
flauschig
gehen
我希望我的代码检查每一行file
是否包含源术语并在其后插入目标术语,因此我的代码file
如下所示:
David has to eat his vegetables Gemüse .
This weather Wetter is very cold .
Can you please stop this music ? This is terrible schreckliche music .
The teddy bear is very plushy flauschig.
I must be going gehen!
是否可以重写上面的代码?
将 GNU awk(OP 正在使用)用于 ARGIND 和字边界:
以上假设您的源不包含任何正则表达式元字符,并且您的替换文本不包含
&
反向引用元字符。它还假设如果相同的单词同时出现在源和目标中,您并不关心替换发生的顺序。