use List::Util qw/uniq/; @data = map { chop $_; @row= split / /, $_; [ join('_', splice(@row,0,4)), @row ] } <>; do { my ($k,@r) = @{shift @data}; if ($kref eq $k) { push @rref, @r; push @rr, \@r; } else { if ($kref) { print "$kref :\t", join(' ', uniq(@rref)), "\n"; print "\t\t@$_\n" for @rr; undef @rr; } ($kref,@rref) = ($k, @r); } } while (@data);