use strict; use warnings; use Data::Dumper; my @data_array = ( [qw/14 27 999 999 0 0/], [qw/14 27 999 999 0 0/], [qw/14 27 999 999 0 0/], [qw/14 27 999 999 1 0/], [qw/14 27 999 999 0 0/], [qw/14 27 999 999 0 0/], [qw/14 27 999 999 0 0/], [qw/27 14 999 999 0 0/], [qw/20 32 999 999 0 0/], [qw/20 32 999 999 0 0/], [qw/20 32 999 999 0 0/], [qw/20 32 999 999 1 0/], [qw/20 32 999 999 0 0/], [qw/20 32 999 999 0 0/], [qw/20 32 999 999 0 0/] ); my @array = map { $_->[4] ? () : join(' ', sort @{$_}[0,1]) } @data_array; my %freq; $freq{$_}++ for @array; my @final = map { "$_ $freq{$_}" } keys %freq; print Dumper(\@final);