【问题标题】:sed or awk replace after ignoring N matchessed 或 awk 忽略 N 匹配后替换
【发布时间】:2017-01-31 13:31:08
【问题描述】:

我有一个重复的文本,我想小心地将一个标签替换为另一个标签,我不介意重复 sed awk 或其他方法。因此,我想先替换前两个匹配项,然后在前 4、6 个等之后替换。我不想要 for,我只需要类似下面的代码,我想跳过前两个匹配,然后增加该数字。

sed 's/foo/bar/2g' fileX 
awk '{ sub(/foo/,"bar"); print }' fileX

这是一个例子。每行出现两次

blastx -q specie.fa -db pep -num 6 -max 1 -o 6 > specie.x.outfmt6
blastp -q specie.pep -db pep -num 6 -max 1 -o 6 > specie.p.outfmt6
blastx -q specie.fa -db pep -num 6 -max 1 -o 6 > specie.x.outfmt6
blastp -q specie.pep -db pep -num 6 -max 1 -o 6 > specie.p.outfmt6

期望的输出

blastx -q dog.fa -db pep -num 6 -max 1 -o 6 > dog.x.outfmt6
blastp -q dog.pep -db pep -num 6 -max 1 -o 6 > dog.p.outfmt6
blastx -q worm.fa -db pep -num 6 -max 1 -o 6 > worm.x.outfmt6
blastp -q worm.pep -db pep -num 6 -max 1 -o 6 > worm.p.outfmt6

【问题讨论】:

  • 我不知道你在说什么。首先你说你想替换前两个匹配,然后你说你想跳过前两个匹配。它是哪一个?也许显示示例输入和所需的输出。
  • 你能提供一个示例输入/输出吗?
  • 我在上面提供了一个例子。
  • 我不知道该示例应该向我们展示什么。你已经用一些动物的名字代替了物种这个词,你说那是after some rounds of code skipping the first 2, the first 4, etc.。嗯?您是否有一个动物名称列表,并且您想将“物种”一词替换为每个名称一次 2 行?
  • 我在下面回答,你说得对,我只是可以通过一个列表,我不知道如何处理。

标签: bash awk replace sed


【解决方案1】:

这是你想要做的吗?

$ awk -v animals='monkey worm dog' 'BEGIN{split(animals,a)} NR%2{c++} {$NF=a[c]} 1' file
here some text -t monkey
and then do something -t monkey
here some text -t worm
and then do something -t worm
here some text -t dog
and then do something -t dog

鉴于您的新示例输入/输出,也许这就是您想要的:

$ awk -v animals='dog worm' 'BEGIN{split(animals,a)} NR%2{c++} {gsub(/specie/,a[c])} 1' file
blastx -q dog.fa -db pep -num 6 -max 1 -o 6 > dog.x.outfmt6
blastp -q dog.pep -db pep -num 6 -max 1 -o 6 > dog.p.outfmt6
blastx -q worm.fa -db pep -num 6 -max 1 -o 6 > worm.x.outfmt6
blastp -q worm.pep -db pep -num 6 -max 1 -o 6 > worm.p.outfmt6

由于您没有在示例输入/输出中包含任何正则表达式字符或反向引用字符或部分匹配情况(例如,如果单词 species 出现在某处并且不应更改)我认为它们不会发生,所以我们不需要脚本来防范它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-02
    • 2014-11-02
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2011-01-23
    相关资源
    最近更新 更多