#! perl -slw use strict; my %ref; open REF, '<', 'ref.txt' or die $!; while( ) { chomp; my @cols = split ' '; push @{ $ref{ $cols[0] } }, [ @cols[ 1, 2 ] ]; } close REF; open QUERY, '<', 'query.txt' or die $!; while( ) { chomp; my @cols = split ' '; my $overlaps = 0; for my $ref ( @{ $ref{ $cols[ 0 ] } } ) { my( $sRef, $eRef ) = @$ref; next if $cols[ 1 ] > $eRef or $cols[ 2 ] < $sRef; ++$overlaps; } print join "\t", @cols[ 0 .. 2 ], $overlaps, @cols[ 3 .. $#cols ]; } close QUERY; __END__ c:\test>819005 c1 100 12000 4 + AT c1 19800 20000 1 - AG c1 20049 20800 0 - GC c9 10078 14008 1 - AG c11 10078 14008 0 - TG c15 10078 14008 0 - TC c9 1078 10008 1 - TA c10 10080 10000 0 - TT