通过与bash中id行的部分匹配来筛选multi-entry.fasta文件

通过与bash中id行的部分匹配来筛选multi-entry.fasta文件,bash,fasta,Bash,Fasta,我有一个.fasta文件,例如: >LTR22_Mio ERV2 Microtus ochrogaster tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcacaagcttcaaggaagagt gcccgcagagaaggtgtgtgtgctgtgcttcctgcatcggagcccttgcacttttggcattacctgctta tgttctaaggaatacagtctggtttcttctggaagggaagatagtat

我有一个.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”
。理想的结果是:

>LTR23  ERV2    Mus Musculus
tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcaca
>LTR_IAP    ERV2    Mus Musculus
tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcacaagcttcaaggaagagt
gcccgcagagaaggtgtgtgtgctgtgcttcctgcatcggagcccttgcacttttggcattacctgctta
tgttctaaggaatacagtctggtttcttctggaagggaagatagtatgtttaagtttccagagtctactg
atgagacattgccatatacaggagtatatgatgctaatggaggaagatgggttaacattcaaggcaaaaa
我试着用谷歌来解决这个比较常见的问题,只找到了第三方的软件包,但希望能找到一个基于本机
bash
的解决方案

我发现这个
grep
只有一行,但它并没有在“header”行之后输出完整的文本块(来源:):

pattern.txt:

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
    对于regex,表示文件开头的字符
    或在换行符之后“将文件拆分为包含 一对标题线和基线
  • 模式
    /Mus Musculus/
    指定打印记录的条件
  • 语句
    sub(/\n$/,“”)
    将删除 档案
  • 语句
    print“>”$0
    输出字符前面的记录
    作为记录分隔符丢失

我个人会使用Perl加上Bioperl软件包中的fasta reader模块。
>LTR23  ERV2    Mus Musculus
tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcaca
>LTR_IAP    ERV2    Mus Musculus
tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcacaagcttcaaggaagagt
gcccgcagagaaggtgtgtgtgctgtgcttcctgcatcggagcccttgcacttttggcattacctgctta
tgttctaaggaatacagtctggtttcttctggaagggaagatagtatgtttaagtttccagagtctactg
atgagacattgccatatacaggagtatatgatgctaatggaggaagatgggttaacattcaaggcaaaaa