我知道喜欢这个问题,但这有点不同。我想基于id行中的单词从fasta文件中提取序列子集,并将找到的序列放入新文件中。我试过了
grep -E 'Eukaryota' test_db.fasta > new.fa
但这只给了我包含这个词的标识符行。我也需要序列。序列的长度各不相同。
任何想法如何改变我的命令或者可能是Perl解决方案?
由于
答案 0 :(得分:3)
试试这个简单的Awk单线。
awk '/^>/ { p = ($0 ~ /Eukaryota/)} p' test_db.fasta>new.fa
这会在以>
开头的任何行上查找“Eukaryota”。如果找到,则p
设置为1,否则设置为0.如果p
非零,则打印该行。
答案 1 :(得分:2)
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/);
}