我有一个.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
非常感谢您的支持!
如果选择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
作为记录分隔符丢失。