我有两个文件,第一个(file1)包含几个rexeges,而另一个(file2)包含FASTA序列。我的目的是使用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...
提前致谢。
答案 0 :(得分:0)
这可能会让你开始。如果您认为它可能对您有用,请告诉我,我可以解释发生了什么:
#!/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);
设置'匹配'变量以测试标题:
my $match = "details2";
while (<$input>) {
chomp;
push @head, $_ if /^>/;
push @seq, $_ if /^[A-Z]/;
@hash{@head} = @seq;
}
遍历哈希的键(标题),如果匹配匹配变量,则测试打印标题和序列:
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