#!/usr/bin/env perl use strict; use warnings; open my $fh, '<', 'file.txt' or die "$!\n"; my $raw = do { local $/; }; my $sorted = join "\n", map { $_->[0] } sort { $a->[1] <=> $b->[1] } sort { $a->[2] <=> $b->[2] } map { [$_, (split /:/)[0,4]] } split( /\n/, $raw); print $sorted;