繁体   English   中英

在Perl中,我如何使用一个文件中的正则表达式来匹配另一个文件中的FASTA序列

[英]In perl, how do i use regexes from one file to match FASTA sequences in another file

我有两个文件,第一个(file1)包含多个rexege,而另一个(file2)包含FASTA sequence。 我的意图是使用file1中的正则表达式检查它们是否与file2中的任何Fasta序列匹配,并打印出至少匹配一个序列的正则表达式,并显示它们匹配的序列数。 我希望提供示例代码,但是我什至无法开始。 请帮忙。

file1的结构使得每行都有一个ID,后跟'>>',然后是正则表达式;

e.g FGER_HWW_PRT >> ..DW[ALK]..[^P]..[VI]{2,4}
    TKAR_GLW_NQW >> [^VKR]{0,2}..FP[D].T.N.Q.

    etc...

file2在一行上具有一个序列标识符,在下一行上具有该序列标识符;

e.g     >lac9_B: details details
    GFVTSDRWPALKMSRWSLEMVWASRGYPLVNDRMWSWSDDDP
    >serP_A: otherdetails details2
    GFVLSDPPPPALKMSRWSLEMVWASRGYPLVNDPWQRTKRKRKDRTCWASNYIHDRP

          etc...

提前致谢。

这可能会让您入门。 如果您认为这可能对您有用,请告诉我,我可以解释发生了什么事:

#!/usr/bin/perl
use warnings;
use strict; 

(使用您的.fasta文件作为输入):

my $infile = 'in.txt';
open my $input, '<', $infile or die "Can't open to $infile: $!";

my (@head, @seq, %hash);

设置一个“ match”变量来测试您的标头是否:

my $match = "details2";
while (<$input>) {
    chomp;
    push @head, $_ if /^>/;
    push @seq, $_ if /^[A-Z]/;
    @hash{@head} = @seq;
}

循环浏览哈希的键(标头),并测试打印标头和序列(如果它们与您的match变量匹配):

foreach my $header (keys %hash){
    if ($header =~ /$match/){
    print "Name: $header\tcontains: '$match'\nSequence: $hash{$header}\n" ; 
    }
}

输出:

Name: >serP_A: otherdetails details2    contains: 'details2'
Sequence: GFVLSDPPPPALKMSRWSLEMVWASRGYPLVNDPWQRTKRKRKDRTCWASNYIHDRP

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM