- 论坛徽章:
- 0
|
本帖最后由 jingwu110 于 2013-01-22 21:40 编辑
小弟初学PERL没有基础,程序如下:
#!/usr/bin/perl -w
use strict;
use warnings;
use POSIX;
my %seq1=();
my %seq2=();
my $index;
my $seq_candidate;
my $seq_line;
my $seq_tmp;
my $seq;
open(IN1,"mine\\my_seq.txt");
while (<IN1>){
if (/>(.*?)\s.*/) {#fasta格式的title第一个空格前是基因名称ID
$seq1{$1}=$_;
$seq2{$1}="";
}
else {
chomp;
$seq2{$1}.=$_;
}
}
close(IN1);
open(OUT,">mine\\result_domain.txt");
open(IN2,"mine\\position.txt");
while (<IN2>) {
if (/^(.*?)\s.*\s(\d+)\s+(\d+)$/) {
chomp $seq1{$1};
print OUT "$seq1{$1}\t$2\t$3";
$seq_candidate=substr($seq2{$1},$2-1,$3-$2+1);
$seq_line=POSIX::ceil(($3-$2+1)/60);
for($index=1;$index<=$seq_line;$index++)
{
$seq_tmp=substr($seq_candidate,($index-1)*60,60);
$seq.="\n".$seq_tmp;
}
print OUT "$seq\n";
}
}
close(IN2);
close(OUT);
主要目的是利用position.txt文件中的信息位点,在my_seq.txt文件中搜寻匹配的序列并截取相应的序列,最后输出result_domain.txt文件,程序是可以运行了,就是存在一个小问题,可能是循环内容出了一点小问题,导致输出的结果累加的,
运行结果片段:
红色标记是截取的每个ID对应的domain序列,问题就是它也会把之前的结果也加进去,然后把对应的新结果加在最后。
如何修改才能实现运行结果不累加!
还请高手指点一二!
程序中需要的文件:
需要的文件.rar
(35.02 KB, 下载次数: 10)
|
|