use strict; my %data = (); while () { chomp; my ($col1, $col2) = split /\s+/; $data{$col1} .= "$col2 "; } print "$_: $data{$_}\n" foreach (sort keys %data); __DATA__ text1 text-a text2 text-b text3 text-c text1 text-d text3 text-e text3 text-f