#!/usr/bin/env perl -l use strict; use warnings; my (%data, @order); while () { chomp; my ($key, $value) = split /\s*,\s*/; push @order, $key unless exists $data{$key}; push @{$data{$key}}, $value; } for my $key (@order) { print "|$key|$_|" for @{$data{$key}}; } __DATA__ 60,811 50, 813 34 , 820 32,821 34 ,820 32 , 821 #### |60|811| |50|813| |34|820| |34|820| |32|821| |32|821| #### #!/usr/bin/env perl -l use strict; use warnings; my %data; while () { chomp; my ($key, $value) = split /\s*,\s*/; push @{$data{$key}}, $value; } for my $key (keys %data) { print "|$key|$_|" for @{$data{$key}}; } __DATA__ 60,811 50, 813 34 , 820 32,821 34 ,820 32 , 821 #### |34|820| |34|820| |60|811| |32|821| |32|821| |50|813|