- 论坛徽章:
- 0
|
看看行不行,有个bug是会打印1409-1409
#!/usr/bin/perl
use strict;
my %hash;
my %hash1;
while(<DATA>){
chomp;
my ($id,$beg,$end,$last)=split /\s+/;
$hash{$id}{$beg}=$end;
$hash1{$id}=$last;
}
foreach my $ID(keys %hash){
my $first=-1;
next if($hash{$ID}{0}==$hash1{$ID}); #全部记录则不打印ID;
print "$ID " ;
for my $BEG(sort {$a<=>$b} keys %{$hash{$ID}}){
printf "%d-%d,",$first+1,$BEG-1 unless($BEG==0);
$first=$hash{$ID}{$BEG};
}
($first < $hash1{$ID})?printf "%d-%d\n",$first+1,$hash1{$ID}:print "\n";
}
__DATA__
AF043090.1 0 2790 2790
AF192261.1 5 203 1054
AF192261.1 301 1028 1054
AF253472.1 0 4175 4309
AF439974.1 16 106 1409
AF439974.1 248 641 1409
AF439974.1 694 1408 1409
AF460219.1 0 2374 4098
AF460219.1 2383 2594 4098
AF460219.1 2669 2759 4098
结果是
AF253472.1 4176-4309
AF439974.1 0-15,107-247,642-693,1409-1409
AF192261.1 0-4,204-300,1029-1054
AF460219.1 2375-2382,2595-2668,2760-4098 |
|