my %info; while() { chomp; my($data, $name) = m< (.*) \s+ (\w+) $ >x; push @{ $info{$name} }, $data; } open(OUT, '>', "outfile") or die("ack - $!"); foreach my $k (sort keys %info) { print OUT $k, "\n"; print OUT $_, "\n" for @{ $info{$k} }; print OUT "\n"; }