grep,基于id行中的单词从fasta文件中提取序列子集

时间:2015-01-21 15:23:18

标签: perl grep extract fasta

我知道喜欢这个问题,但这有点不同。我想基于id行中的单词从fasta文件中提取序列子集,并将找到的序列放入新文件中。我试过了

grep -E 'Eukaryota' test_db.fasta > new.fa

但这只给了我包含这个词的标识符行。我也需要序列。序列的长度各不相同。

任何想法如何改变我的命令或者可能是Perl解决方案?

由于

2 个答案:

答案 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/);
}