This is what my second proposal does. If you have the interval boundaries in variables $start and $end, then
my @inInterval = map { $_->[1] } grep { $start <= $_->[0] and $_->[0]
+<= $end } @SNPs;
will filter all relevant lines for this interval. You would just print OUT @inInterval; where OUT is the file handle for the file corresponding to this interval.
Something like this:
open my $CG, "<", $cg_input or die "can't open $cg_input\n";
my @SNPs = map { [ (split /\t/)[3], $_ ] } <$CG>;
close($CG);
open my $INTERVAL, "<", $input_interval or die "can't open $input_inte
+rval\n";
my $interval = <$INTERVAL>; # skip first line
foreach (<$INTERVAL>){
chomp;
my( $start, $end ) = split /\t/;
open my $OUT, ">", $output_directory."temp_file_".$count++.".txt";
+
print $OUT map { $_->[1] } grep { $start <= $_->[0] and $_->[0] <=
+ $end } @SNPs;
close $OUT;
}
close($INTERVAL);
|