#!/usr/bin/perl -w use strict; use warnings; my %IPs; while() { if (m#^(\d+)([\s\d/]+)IP\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)#) { push @{$IPs{$1}}, sprintf("%-10s %-24s %s", $1 . $2, $3, $4); } } print "KEY \tIP NAME STATUS\n" . "------\t---------- ------------------------ --------------\n"; for my $IP (sort keys %IPs) { print sprintf("%-6s\t",$IP), join("\n\t", sort @{$IPs{$IP}}), "\n"; } __DATA__ 2345 IP NAME.com online IPADDRESS1 2345/1243 IP Name-interface.com inactive IPADDRESS2 2345/3213 IP NAME-interfce2.com online IPADDRESS1 2345/1212 IP Name-interface3.com online IPADDRESS3 4321 IP CNAME.com dead IPADDRESS_1 4321/1643 IP CName-interface.com online IPADDRESS_1 4321/3673 IP CNAME-interfce2.com online IPADDRESS_2