【发布时间】:2019-01-29 22:36:41
【问题描述】:
我想找出从 cds 在 6 个正向和反向帧中翻译的最长可能的蛋白质序列。
这是示例输入格式:
>111
KKKKKKKMGFSOXLKPXLLLLLLLLLLLLLLLLLMJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJX
>222
WWWMPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPMPPPPPXKKKKKK
我想找出从“M”开始到“X”停止的所有字符串,计算每个字符串的长度并选择最长的。
例如上面的例子:
脚本会找到,
>111 has two matches:
MGFSOX
MJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJX
>222 has one match:
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPMPPPPPX
然后计算每个匹配的长度,并打印字符串和最长匹配的数量,这是我想要的结果:
>111
MJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJX 32
>222
MPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPMPPPPPX 38
但它没有打印出任何答案。有谁知道如何修理它?任何建议都会有所帮助。
#!/usr/bin/perl -w
use strict;
use warnings;
my @pep=();
my $i=();
my @Xnum=();
my $n=();
my %hash=();
my @k=();
my $seq=();
$n=0;
open(IN, "<$ARGV[0]");
while(<IN>){
chomp;
if($_=~/^[^\>]/){
@pep=split(//, $_);
if($_ =~ /(X)/){
push(@Xnum, $1);
if($n >= 0 && $n <= $#Xnum){
if(@pep eq "M"){
for($i=1; $i<=$#pep; $i++){
$seq=join("",@pep);
$hash{$i}=$seq;
push(@k, $i);
}
}
elsif(@pep eq "X"){
$n=$n+1;
}
foreach (sort {$a cmp $b} @k){
print "$hash{$k[0]}\t$k[0]";
}
}
}
}
elsif($_=~/^\>/){
print "$_\n";
}
}
close IN;
【问题讨论】:
-
啊,我很乐意提供帮助,但您必须笼统地解释一下;不是每个人都了解他们的简历。请定义一个清晰的问题陈述。
-
感谢您的提醒。我已经修改了我的问题。
-
您介意发布一些示例输入吗?
-
是的,请勾选第一个框
标签: perl