my %seen; $/ = "\n\n"; while (<>) { chomp; my ($idline, @letters) = split(/\n/, $_); my @fields = split('\|', $_); my $record = $seen{$fields[0]}; unless ($record) { $seen{$fields[0]} = $record = { idline => $idline, letters => [ @letters ] }; } else { push(@{$record->{letters}}, @letters); } } for keys (%seen) { print join("\n", $seen->{$_}->{idline}, @{$seen->{$_}->{letters}}, "\n"), "\n"; }