如何在一个文件中提取fasta序列,该文件的头部行与另一个文件中的列表相匹配?
我是一个新手,Perl的。我试图从一个与另一个文件中的行匹配的文件中提取fasta序列。两个示例文件如下:如何在一个文件中提取fasta序列,该文件的头部行与另一个文件中的列表相匹配?
File1.fasta:
> gene_44 | 105_nt | + | 47540 | 47644 GTGCGCCGGCGCGTCGCGATCGCGAACCGGCCCGTGCGAATCCTGCCGCATGCGCGCCGCATCTCGCCACGCCGCGCATTTCATTTCGACATCCATAACGTCTGA
> gene_69 | 111_nt | + | 75846 | 75956 ATGCCGTTGCCGTCGCGCATCGCGGCGGCCGTGCGCGGCGCGCATGCATACGCCGGCACGGCCGATGCGCGCGCGACGCGCAAACTGCACGCGGCGCGGGATTTGTGTTGA
> gene_88 | 177_nt | - | 97993 | 98169
ATGCGCCAGCCGACGCACGCCCATTCCGGGCGAAACGTTCCCCTTATCCATTCGATCATCCGTGCCGCACTGCGCGAAGCGGCCACCGCCGACACGTACCAAACCGCGCTCGATGCGACCGGCGCGGCACTCGTCGCCATCGCGGCGCTCGTGCGCGCGGAGGTGCGGCATGGCTGA> gene_90 | 141_nt | - | 99016 | 99156
TTGGAAGGGCGCTTTCCGCGTGCGAGTCGTCTGACGCAGCGTTGCACGGTCTGGTCGAATCGCGAGCTTCATCGCTGGATGGCCGATCCGTTGAACTATCGCGCTGTCGACGCGGCGAACCAGACGACGGAGGGCGCGTAA
File2.list:
somewordsinfront,> gene_44 | somewordsattheback
blablabla,> gene_88 | blablablablabla
,我期望是如下输出:
> gene_44 | 105_nt | + | 47540 | 47644 GTGCGCCGGCGCGTCGCGATCGCGAACCGGCCCGTGCGAATCCTGCCGCATGCGCGCCGCATCTCGCCACGCCGCGCATTTCATTTCGACATCCATAACGTCTGA
> gene_88 | 177_nt | - | 97993 | 98169
ATGCGCCAGCCGACGCACGCCCATTCCGGGCGAAACGTTCCCCTTATCCATTCGATCATCCGTGCCGCACTGCGCGAAG CGGCCACCGCCGACACGTACCAAACCGCGCTCGATGCGACCGGCGCGGCACTCGTCGCCATCGCGGCGCTCGTGCGCGCGGAGGTGCGGCATGGCTGA
我怎样才能做到这一点?提前致谢! :)
当你问的问题下一次,请您出示的代码,例如
use strict;
use warnings;
my @genes;
open my $list, '<file2.list';
while (my $line = <$list>) {
push (@genes, $1) if $line =~ /[^>]+>([^|]+)/;
}
my $input;
close $list;
{
local $/ = undef;
open my $fasta, '<file1.fasta';
$input = <$fasta>;
close $fasta;
}
my @lines = split(/>/,$input);
foreach my $l (@lines) {
foreach my $reg (@genes) {
print ">$l" if $l =~ /$reg/
}
}
非常感谢@Suic。这似乎部分适用于我,但我遇到了一些问题。比方说,如果有一个与头部的另一个序列“> gene_449 | 141_nt | - | 99016 | 99156”在file1.fasta,这个序列也将包括在输出文件,该文件其实它不应该。这可能是因为file2.list中的字符串'gene_44'与它匹配,所以这个序列也包含在输出中。我怎样才能摆脱这一点?再次感谢。 – nicole 2013-04-07 08:12:40
你能解决这个问题,通过改变这一行'打印 “> $ L” 如果$ L =〜/ $ REG \ | /;' – Suic 2013-04-07 12:28:39
@ Suic-这真是对我的作品!为了解决这个问题,我已经尝试了整整一天。“ nicole 2013-04-07 12:39:59