use Modern::Perl; use Sort::Key::IPv4 qw(ipv4sort); my %hash; do { chomp( my ( $ip, $fld2, $fld3 ) = ( split /\t/ )[ 1 .. 3 ] ); push @{ $hash{$ip} }, "$fld2=$fld3"; } for ; print "$_|" . join( '|', @{ $hash{$_} } ) . "\n\n" for ipv4sort keys %hash; __DATA__ 9885 10.10.9.48 Room 1105A 9885 10.10.9.48 Jack 1105A--05D 9885 10.10.9.48 org_code B703 9885 10.10.9.48 Building 1268A 114948 10.10.184.0 nasa_nets off 114948 10.10.184.0 blockSecName test name 114948 10.10.184.0 blockTechName brian test 114948 10.10.184.0 blockAdminName test admin 114949 10.10.184.0 blockSecName John G. Smooth 114949 10.10.184.0 blockTechPhone 256-555-1212 114949 10.10.184.0 blockAdminName Lucy P. Wallice 114949 10.10.184.0 blockAdminId 8878787 114949 10.10.184.0 block_name unknown 114949 10.10.184.0 blockSecId 787878 114949 10.10.184.0 blockAdminEmail lucy.p.wallice@nasa.gov 114949 10.10.184.0 blockTechName TEST LAN 114949 10.10.184.0 blockSecPhone 256-555-3232 114949 10.10.184.0 blockTechEmail terCInternal@mail.nasa.gov 114949 10.10.184.0 blockSecEmail John.goody@nasa.gov 114949 10.10.184.0 nasa_nets Soff