use strict; use warnings; my %seen; while ( ) { next unless /^(([^<]+)<\/cnt>)(.*)$/; print $seen{$2}++ ? "$3\n" : "$1$3\n"; } __DATA__ FranceACCOR FranceAGF FranceAIR LIQUIDE GermanyALLIANZ INSURANCE GermanyALLIANZ PARKWAY GermanyALLIED DOMECQ United KingdomLEICESTER CITY FOOTBALL CLUB United KingdomSPENCER GEARS