- 论坛徽章:
- 145
|
本帖最后由 jason680 于 2016-08-14 12:37 编辑
$ perl get_len.pl
len start end A B C
len_1 01 330 401 1 3 0
len_2 01 432 452 0 0 1
len_3 01 500 600 0 3 4
$ cat get_len.pl
use strict;
use warnings;
my $sFa = "a.txt";
my $sFb = "b.txt";
open(my $FHa, "<", $sFa) or die "can't open $sFa\n";
open(my $FHb, "<", $sFb) or die "can't open $sFb\n";
sub get_len{
my($FH) = @_;
$_ = <$FH>;
s/\s*$//;
return(split);
}
my $sCnt = 0;
my ($sNum_a, $sVal, $sKey) = (0,0,"");
print join("\t", " ", qw/ len start end A B C/), "\n";
while(<$FHb>){
chomp;
my($sLen, $sNum, $sStart, $sEnd) = split;
my %hCnt=('A' => 0, 'B' => 0, 'C' => 0);
while($sNum > $sNum_a or $sNum == $sNum_a && $sVal <= $sEnd ){
++$hCnt{$sKey} if($sNum==$sNum_a && $sStart <= $sVal && $sVal <= $sEnd);
last if eof $FHa;
($sNum_a, $sVal, $sKey) = get_len($FHa);
}
print join("\t", $sLen, $sNum, $sStart, $sEnd, @hCnt{qw/A B C/}),"\n";
}
|
|