#!/bin/perl5 use strict; use warnings; use Data::Dumper; my %data; while (my $record = ){ chomp $record; my ($fld1, $fld2, $fld3) = split /\|/, $record; push @{$data{$fld1}{$fld2}}, $fld3; } for my $fld1 (sort keys %data){ for my $fld2 (keys %{$data{$fld1}}){ print "$fld1|$fld2|", join(',', @{$data{$fld1}{$fld2}}), "\n"; } } __DATA__ aaa|bbb|ccc ddd|eee|fff ddd|eee|xxxxx hhh|iiii|jjjjjj #### ---------- Capture Output ---------- > "C:\Perl\bin\perl.exe" _new.pl aaa|bbb|ccc ddd|eee|fff,xxxxx hhh|iiii|jjjjjj > Terminated with exit code 0.