我知道有类似的问题,但这有点不同。我希望根据id行中的单词从fasta文件中提取一个序列子集,并将这些序列放入新文件中。我试过了
grep -E 'Eukaryota' test_db.fasta > new.fa
但这只给了我包含单词的标识符行。我也需要序列。序列的长度各不相同。
有什么想法可以改变我的命令或者Perl解决方案吗?
谢谢
发布于 2015-01-21 15:58:28
BioPerl很适合做这样的事情。
这个小脚本将完成以下工作:
#!/usr/bin/perl -w
use strict;
use diagnostics;
use warnings;
use Bio::SeqIO;
my $seqIOin = Bio::SeqIO->new(-format => 'fasta', -file => "<fasta_to_filter.fa");
my $seqIOout = Bio::SeqIO->new(-format => 'fasta', -file => ">selected_sequences.fa");
while (my $seq = $seqIOin->next_seq){
$seqIOout->write_seq($seq) if ($seq->id =~ /YOUR_WORD/);
}
发布于 2015-01-21 16:21:39
试试看这个简单的Awk单衬垫。
awk '/^>/ { p = ($0 ~ /Eukaryota/)} p' test_db.fasta>new.fa
它在以>
开头的任何行上查找"Eukaryota“。如果找到它,则将p
设置为1,否则设置为0。如果p
为非零,则打印这一行.
https://stackoverflow.com/questions/28070734
复制相似问题