my $range_start = 700; my $range_end = 1200; my %out = (); while (<>) { if ( /bn(\d+),/ && $1 >= $range_start && $1 <= $range_end ) { my $bn = $1; my ($when) = /^[^,]+,\w+\s+(\S+)\s/; push @{$out{$bn}}, $when; } } foreach my $ranger ( sort { $a <=> $b } keys %out ) { print "$ranger - "; print join ', ', @{$out{$ranger}}; print "\n"; }