我需要将第二次出现的模式(与最后一个字段匹配)替换为另一个模式,并保留文件中所有此类更改的计数。
示例:try.txt
np.argmax(probs, 1)
在所有具有“更改”模式的行中,我想替换最后一个单词,例如第二行中的“orange”,例如pear。请注意,不应更改第一个橙色。我还想添加一个后缀,显示文件中发生的更改次数。
我试过跟随,但它改变了两个出现的事件(第1个橙色和第2个橙色,第1个弗雷德和第2个弗雷德,第1个karly和第2个karly),而我只想改变第二次出现。
gen_nn_ops._sparse_softmax_cross_entropy_with_logits
输出结果为:
Hi
Change apple orange guava mango banana orange
It's hot outside
Change tom greg fred harry steve fred
George is a cool guy
Change mary lucy becky karly jill karly
thank you
所需的输出是:
awk 'BEGIN {cntr=0} {if (/Change/) {gsub($NF,"pear"); OFS=""; print $0,cntr; cntr++} else {print}}' try.txt
当gsub被sub替换时,它只会在第一次出现时发生变化。任何帮助表示赞赏。
答案 0 :(得分:1)
这个单行程适用于您的输入:
awk '/Change/{$NF="peal"(i++)}7' file
这一行会覆盖OFS
,但是,如果你想保持OFS
(例如连续空格)不变,你可以这样做:
awk '/Change/{sub(/\S+$/,"peal"(i++))}7' file
答案 1 :(得分:0)
我想我找到了解决办法:
awk'BEGIN {cntr = 0} {if(/ Change /){$ NF = $ NF_cntr;子($ NF, “梨”); OFS = “”; print $ 0,cntr; OFS =“”; cntr ++} else {print}}'try.txt
输出是我想要的。
但我仍希望听到社区提供更好的实现方法。
由于