perl -F"," -lane "push @{$h{$F[0]}},$F[1]}{print map{$_.'|'.(join',',@{$h{$_}}).qq(\n)}keys %h" data.txt 20155505|YOUSLAV,YURT,TENWIMPL 20102741|WEDLOFOU,YOUSLAV,YURT,KUPLYSO,TENWIMPL 20011541|YOUSLAV,TENWIMPL 20011271|YOUSLAV,WUMARTHE 20147155|YOUSLAV,KUPLYSO,FRIMA 20055111|YOUSLAV,YURT,TENWIMPL #### perl -MO=Deparse -F"," -lane "push @{$h{$F[0]}},$F[1]}{print map{$_.'|'.(join',',@{$h{$_}}).qq(\n)}keys %h" BEGIN { $/ = "\n"; $\ = "\n"; } LINE: while (defined($_ = )) { chomp $_; our(@F) = split(/,/, $_, 0); push @{$h{$F[0]};}, $F[1]; } { print map({$_ . '|' . join(',', @{$h{$_};}) . "\n";} keys %h); } -e syntax OK