#!/usr/bin/perl -w use strict; my %records; while () { my ($md5,$version,$end) = split(/[_\n]+/,$_); next unless ($end eq 'max'); $records{$md5} = $version unless ( exists $records{$md5} && $records{$md5}< $version) ; } foreach my $md5 (sort keys %records) { print $md5,"_",$records{$md5},"_max\n"; } #Prints: #111aaa222ccc324567fed54333221235_1.02_max #777aaa222ccc324567fed54333221235_1.04_max __DATA__ 111aaa222ccc324567fed54333221235_1.04 111aaa222ccc324567fed54333221235_1.05_max 111aaa222ccc324567fed54333221235_0.98_min 111aaa222ccc324567fed54333221235_1.02_max 111aaa222ccc324567fed54333221235_0.21 777aaa222ccc324567fed54333221235_1.04 777aaa222ccc324567fed54333221235_1.07_min 777aaa222ccc324567fed54333221235_1.04_max