#!/usr/bin/perl use strict; my %record; my $previous_event; my $max_event = 4; my $key = 1; while (my $line = ) { chomp( $line ); my ($current_event) = $line =~ /EVENT(\d)/; $record{$key}->{$current_event} = $line; $key++ if ( $current_event == 4 && $previous_event != $current_event ); $previous_event = $current_event; } for my $i (sort keys %record) { print map { $record{$i}->{$_} . "\n" } sort keys %{ $record{$i} }; } __DATA__ 09:12:50:861 EVENT1 09:13:09:467 EVENT1 09:13:09:837 EVENT1 09:13:38:059 EVENT2 09:14:03:115 EVENT3 09:14:04:076 EVENT4 09:14:11:376 EVENT1 09:14:34:049 EVENT2 09:14:34:990 EVENT3 09:14:34:990 EVENT3 09:14:34:990 EVENT4