use warnings; use strict; use List::Util qw(min max); my %hash=(); my $limitedDistance = 10000; open(INP, "bedtoolsOutput"); while() { my @a=split; my $idA=$a[3]; my $idB=$a[7]; my $dis=$a[8]; if($hash{$idA} and !$hash{$idB}){ print "$a[4]\t$a[5]\t$a[6]\t$a[7]\n"; $hash{$idB}=1; } if($hash{$idB} and ! $hash{$idA}){ print "$a[0]\t$a[1]\t$a[2]\t$a[3]\n"; $hash{$idA}=1; } if(!$hash{$idA} and ! $hash{$idB}){ if($dis > $limitedDistance) { print "$a[0]\t$a[1]\t$a[2]\t$a[3]\n"; print "$a[4]\t$a[5]\t$a[6]\t$a[7]\n"; } else { my $start=min($a[1], $a[5]); my $end=max($a[2],$a[6]); print "$a[0]\t$start\t$end\t$a[3],$a[7]\n"; $hash{$idA}=1; $hash{$idB}=1; } } }