use strict; use warnings; my @sorted; $sorted[0] = 'ABCDEF 958439 MS08-074 Security Update for the 2007 Microsoft Office System (KB958439) 2009-01-08'; $sorted[1] = 'FFFFFF 958439 MS08-074 Security Update for the 2007 Microsoft Office System (KB958439) 2009-01-09'; my $current = undef; my $prev = undef; my %filtered = (); foreach my $line (@sorted){ my @split = split(/\s/, $line); if (defined $filtered{$split[1]}) { substr($filtered{$split[1]},0,1) = (++substr($filtered{$split[1]},0,1)); $filtered{$split[1]} .= "\t$split[$#split]"; } else { $filtered{$split[1]} = "1\t$split[1]\t$split[0]\t$split[2]\t$split[$#split]"; } } print "\nTOTAL\tBulletinID\tKBID\t\tdate\n"; foreach my $line (values %filtered){ print "$line\n"; } print "\n";