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

grep, Extracting A Subset Of Sequences from fasta file based on word in id line

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

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

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

关于如何更改我的命令或 Perl 解决方案有任何想法吗?

谢谢

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

试试这个简单的 Awk 单行代码。

awk '/^>/ { p = ([=10=] ~ /Eukaryota/)} p' test_db.fasta>new.fa

这会在任何以 > 开头的行上查找 "Eukaryota"。如果找到,则 p 设置为 1,否则设置为 0。如果 p 非零,则打印该行。