【发布时间】:2011-03-07 15:59:10
【问题描述】:
以下是fasta fileA的内容:
>1
PLAARRPRRGKSLAGFESLACSFPVVSRGFLASRSARSLSSEGGTMPDNRQ
PRNRQPRIRSGNEPRSAPAMEPDGRGAWAHSRAALDRLEKLLRCSRCTNIL
REPVCLGGCEHIFCSNCVSDCIGTGCPVCYTPAWIQDLKINRQLDSMIQL
>2
PLWRPAVPDAGRARPVWSRWSAASLWFLKASLLPALRGAFHPKAGRCRIIGS
RGTGSRGSAPGTSLVPRPPWNRMVAVPGPTVAPRSTAWRSCCAARVVLTF*E
SLCV*EDVSTSSVVIV*VTALELDVQCVTPRPGYKT*R*ID
>3
TPPLWRPAVPDAGRAWPVSSRWPAASRWFPEASLLPALRGAFHPKAGRCRII
GSRGTGSRGSAPGTSLVPRPPWNRMVAVPGPTVAPRSTAWRSCCAARVVLTF
现在我需要将 fileA 作为输入,找出 1 和 2 以及 1-3 之间存在的不匹配,并找出它们之间的核苷酸变化。到目前为止,我已经编写了一个程序,但它不接受 fileA 作为输入。请帮忙
我的问题是我需要将 fileA 作为输入,并且序列在每 51 个核苷酸之后包含换行符,我的程序也考虑换行符来找出不匹配。
计划:
$a=<>;$b=<>;
@mul=("$a","$b");
for($i=0;$i<scalar(@mul)-1;$i++) {
$source=$mul[$i];
print "\n\nComparision of source: $mul[$i]\n";
print "------------------------------------";
for($j=$i+1;$j<scalar(@mul);$j++) {
$sample=$mul[$j];
print "\n$sample ";
print "\n------\n";
$t=mutate($source,$sample);
print $t;
}
}
sub mutate {
my ($s1,$s2)=@_;
$temp="";
for($k=0;$k<length($s1);$k++) {
$seq1=substr($s1,$k,1);
$seq2=substr($s2,$k,1);
if($seq1 ne $seq2) {
$temp.="[$seq1($k)/$seq2($k)]";
}
}
return $temp;
}
【问题讨论】:
-
你的问题到底是什么?
-
要删除换行符,您可以使用 chomp 或使用正则表达式 s/\n//g
-
@aki 我也尝试过使用 chomp ......但它没有给出输出......无法找出问题所在。
-
这是你的实际文件吗(我假设你的文件看起来像你上面粘贴的那样)。是在linux还是windows下。
-
你能把问题解释清楚吗?是这样的吗,您的文件有三组行,并且在各组之间要打印匹配的字符数与文件中字符总数的比率。
标签: perl bioinformatics