通过对bash中的id行进行部分匹配来过滤多条目.fasta文件

问题描述 投票:0回答:1

我有一个.fasta文件,例如:

>LTR22_Mio  ERV2    Microtus ochrogaster
tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcacaagcttcaaggaagagt
gcccgcagagaaggtgtgtgtgctgtgcttcctgcatcggagcccttgcacttttggcattacctgctta
tgttctaaggaatacagtctggtttcttctggaagggaagatagtatgtttaagtttccagagtctactg
>LTR23  ERV2    Mus Musculus
tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcaca
>LTR_IAP    ERV2    Mus Musculus
tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcacaagcttcaaggaagagt
gcccgcagagaaggtgtgtgtgctgtgcttcctgcatcggagcccttgcacttttggcattacctgctta
tgttctaaggaatacagtctggtttcttctggaagggaagatagtatgtttaagtttccagagtctactg
atgagacattgccatatacaggagtatatgatgctaatggaggaagatgggttaacattcaaggcaaaaa

在我的示例中,我尝试提取所有标题(以>...开头的行)和下面的文本块,直到下一个与某种模式部分匹配的>。理想的结果是:

"Mus musculus"

我尝试使用google解决这个相对常见的问题,但只为此找到了第三方软件包,但希望有一个基于>LTR23 ERV2 Mus Musculus tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcaca >LTR_IAP ERV2 Mus Musculus tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcacaagcttcaaggaagagt gcccgcagagaaggtgtgtgtgctgtgcttcctgcatcggagcccttgcacttttggcattacctgctta tgttctaaggaatacagtctggtttcttctggaagggaagatagtatgtttaagtttccagagtctactg atgagacattgccatatacaggagtatatgatgctaatggaggaagatgggttaacattcaaggcaaaaa 的本地解决方案。

我发现此bash单行代码,但在“标题”行之后未输出完整的文本块(来源:grep):

https://www.biostars.org/p/319099/

pattern.txt:

grep -w -A 2 -f pattern.txt myfile.fasta --no-group-separator

非常感谢您的支持!

bash fasta
1个回答
0
投票

如果选择Mus Musculus ,请尝试以下操作:

awk

输出:

awk 'BEGIN {RS = "(^|\n)>"}
   /Mus Musculus/ {
        sub(/\n$/, "");
        print ">" $0
   }
' file.fasta
  • 语句>LTR23 ERV2 Mus Musculus tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcaca >LTR_IAP ERV2 Mus Musculus tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcacaagcttcaaggaagagt gcccgcagagaaggtgtgtgtgctgtgcttcctgcatcggagcccttgcacttttggcattacctgctta tgttctaaggaatacagtctggtttcttctggaagggaagatagtatgtttaagtttccagagtctactg atgagacattgccatatacaggagtatatgatgctaatggaggaagatgggttaacattcaaggcaaaaa 分配记录分隔符BEGIN {RS = "(^|\n)>"}正则表达式的意思是“文件开头的字符RS或在换行符之后”将文件拆分为包含以下内容的记录一对标题行和一个基线。
  • 模式>指定打印记录的条件。
  • 语句/Mus Musculus/删除了末尾多余的换行符文件。
  • 语句sub(/\n$/, "")输出以字符开头的记录print ">" $0作为记录分隔符丢失。
© www.soinside.com 2019 - 2024. All rights reserved.