2013-04-06 65 views
1

我是一个新手,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

我怎样才能做到这一点?提前致谢! :)

回答

0

当你问的问题下一次,请您出示的代码,例如

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/ 
    } 
} 
+0

非常感谢@Suic。这似乎部分适用于我,但我遇到了一些问题。比方说,如果有一个与头部的另一个序列“> gene_449 | 141_nt | - | 99016 | 99156”在file1.fasta,这个序列也将包括在输出文件,该文件其实它不应该。这可能是因为file2.list中的字符串'gene_44'与它匹配,所以这个序列也包含在输出中。我怎样才能摆脱这一点?再次感谢。 – nicole 2013-04-07 08:12:40

+0

你能解决这个问题,通过改变这一行'打印 “> $ L” 如果$ L =〜/ $ REG \ | /;' – Suic 2013-04-07 12:28:39

+0

@ Suic-这真是对我的作品!为了解决这个问题,我已经尝试了整整一天。“<千谢谢! :) – nicole 2013-04-07 12:39:59

相关问题