通过与bash中id行的部分匹配来筛选multi-entry.fasta文件
我有一个.fasta文件,例如:通过与bash中id行的部分匹配来筛选multi-entry.fasta文件,bash,fasta,Bash,Fasta,我有一个.fasta文件,例如: >LTR22_Mio ERV2 Microtus ochrogaster tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcacaagcttcaaggaagagt gcccgcagagaaggtgtgtgtgctgtgcttcctgcatcggagcccttgcacttttggcattacctgctta tgttctaaggaatacagtctggtttcttctggaagggaagatagtat
>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)>”}
对于regex,表示文件开头的字符RS
或在换行符之后“将文件拆分为包含 一对标题线和基线 - 模式
指定打印记录的条件/Mus Musculus/
- 语句
将删除 档案sub(/\n$/,“”)
- 语句
输出字符前面的记录print“>”$0
作为记录分隔符丢失
>LTR23 ERV2 Mus Musculus
tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcaca
>LTR_IAP ERV2 Mus Musculus
tgtcacgccacctcctgcggagtctgcgtgatctctcacgtaggctgtggcacaagcttcaaggaagagt
gcccgcagagaaggtgtgtgtgctgtgcttcctgcatcggagcccttgcacttttggcattacctgctta
tgttctaaggaatacagtctggtttcttctggaagggaagatagtatgtttaagtttccagagtctactg
atgagacattgccatatacaggagtatatgatgctaatggaggaagatgggttaacattcaaggcaaaaa