my %rows; while () { my ($key, $c1, $c2, $c3) = split; push @{ $rows{$key} }, "${c1}_$c2,$c3"; } for my $key (keys %rows) { print join("\t", $key, @{ $rows{$key} }), "\n"; } __DATA__ frog-n as novelty-n 5.8504 frog-n be yellow-n 6.1961 frog-n be-1 Asia-n 5.0937 frog-n coord zebra-n 5.9279 frog-n coord-1 Canuck-n 6.3363 frog-n nmod-1 mule-n 4.2881 amphibian-n success-1 surprising-j 14.6340 amphibian-n such_as alligator-n 11.5265 amphibian-n than work-n 5.9948 amphibian-n though stalk-n 13.2228