use strict; use warnings; my %seen; while () { chomp; my ($col1) = /(\d+)/; $seen{$col1} = $_ if /\*\*/; $seen{$col1} = $_ if !exists $seen{$col1} or $seen{$col1} !~ /\*\*/; } print "$seen{$_}\n" for keys %seen; __DATA__ 11111111 ** N Sep 29 356200 AGEC682569 ATI S 11111111 N Sep 29 356200 AGEC682569 ATI S 30380868 N Sep 29 356200 AGEC682569 ATI S 30380868 ** N Sep 29 356200 AGEC682569 ATI S 71130740 N Sep 7 SM9481 AGEC683966 ATI S 71130740 ** N Sep 7 SM9481 AGEC683966 ATI S 32450045 N Jul 14 SN9672 AGEC685203 ATI S 32450045 ** N Jul 14 SN9672 AGEC685203 ATI S 36450223 N Aug 30 SU8329 AGEC685348 ATI S 34680135 N Sep 30 349450 AGEC685442 ATI S