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
非零,则打印该行。
我知道有喜欢这个问题,但这个问题略有不同。我想根据 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
非零,则打印该行。