use strict; use Data::Dump qw/dump/; my %data; while () { chomp; my ( $field1, $field2, $field3, $field4 ) = split '\s+'; $data{$field1}{$field2}{'min'} = $field3 if ( not defined $data{$field1}{$field2}{'min'} or $field3 < $data{$field1}{$field2}{'min'} ); $data{$field1}{$field2}{'max'} = $field4 if ( not defined $data{$field1}{$field2}{'max'} or $field4 > $data{$field1}{$field2}{'max'} ); } ## end while () print dump( \%data ); __DATA__ 253868 20 317 2628 253868 20 317 7294 256158 9 329 371 256158 9 329 86450 728481 1 353 1361 154664 7 440 449688 154664 7 440 563