my $hostfile = '/tmp/jn/hosts'; open my $hostFH, '<', $hostfile or die "open: < $hostfile: $!\n"; #### $ perl -le ' > @IPs = qw{ 22.32.87.12 56.67.38.61 101.12.34.54 }; > print for sort @IPs;' 101.12.34.54 22.32.87.12 56.67.38.61 $ #### use strict; use warnings; my %seen; my @sortedUniques = map { ( split m{\s+}, $_->[ 0 ] )[ 0 ] } sort { $a->[ 1 ] cmp $b->[ 1 ] } grep { ! $seen{ $_->[ 1 ] } ++ } map { m{^(\d+)\.(\d+)\.(\d+)\.(\d+)\t} ? [ $_, sprintf q{%03d%03d%03d%03d}, $1, $2, $3, $4 ] : () } ; print qq{$_\n} for @sortedUniques; __END__ # hosts file 10.31.17.65 fw2 192.168.1.78 hosta 192.168.1.21 hostb 10.31.17.65 fw2dup 10.23.212.6 hostc 192.168.100.254 fw1 192.168.1.21 hostbdup #### 10.23.212.6 10.31.17.65 192.168.1.21 192.168.1.78 192.168.100.254