#! perl -slw use strict; use Data::Dump qw[ pp ]; my( @ordered, %grouped ); while( ) { chomp; my @pair = split ',', $_; $ordered[ @ordered ] = $pair[ 0 ] unless exists $grouped{ $pair[ 0 ] }; push @{ $grouped{ $pair[0] } }, $pair[1]; } #pp \@ordered, \%grouped; print "$_|", join ',', @{ $grouped{ $_ } } for @ordered; __DATA__ 20055111,YOUSLAV, 20055111,YURT, 20055111,TENWIMPL, 20011271,YOUSLAV, 20011271,WUMARTHE 20011541,YOUSLAV, 20011541,TENWIMPL, 20102741,WEDLOFOU, 20102741,YOUSLAV, 20102741,YURT, 20102741,KUPLYSO, 20102741,TENWIMPL, 20155505,YOUSLAV, 20155505,YURT, 20155505,TENWIMPL, 20147155,YOUSLAV, 20147155,KUPLYSO, 20147155,FRIMA,