#!/usr/bin/perl use warnings; use strict; open FIN, '<', 'something.csv' or die "Cannot open 'something.csv' because: $!"; open FOUT, '>', 'something_new.csv' or die "Cannot open 'something_new.csv' because: $!"; my %data; while ( ) { next unless /^(\d+):(\d+):\d+\s+(\d+)$/; my $key = sprintf '%02d%02d', $1, int( $2 / 5 ) * 5; if ( exists $data{ $key } ) { $data{ $key } = [ $., $_, $3 ] if $data{ $key }[ 2 ] < $3; } else { $data{ $key } = [ $., $_, $3 ]; } } print FOUT map $_->[ 1 ], sort { $a->[ 0 ] <=> $b->[ 0 ] } values %data;