[英]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.