use warnings; use strict; use Data::Dumper; push my @array, map { [ int( $_->[1] / 1_000_000 ), $_->[0] ] } sort { $a->[1] <=> $b->[1] } map { [ $_, ( split /\s+/, $_ )[4] ] } ; print Dumper \@array; __DATA__ 0 50 4 46 723430 0 2 1 2 1 1 1 1 3 1 0 50 4 46 5533723430 0 2 1 2 1 1 1 1 3 1 0 50 4 46 33723430 0 2 1 2 1 1 1 1 3 1 0 50 2 48 654732 0 1 1 1 0 2 3 2 1 3 #### $VAR1 = [ [ 0, '0 50 2 48 654732 0 1 1 1 0 2 3 2 1 3 ' ], [ 0, '0 50 4 46 723430 0 2 1 2 1 1 1 1 3 1 ' ], [ 33, '0 50 4 46 33723430 0 2 1 2 1 1 1 1 3 1 ' ], [ 5533, '0 50 4 46 5533723430 0 2 1 2 1 1 1 1 3 1 ' ] ];