file1: COMPANY ABCD 764200 E 2013,12,13 2013,12,19 COMPANY BCDX 156167 L 2013,11,29 2013,12,03 COMPANY BCYX 165230 L 2013,12,13 2013,12,19 file2: COMPANY ABCD 764200 E 2013,12,13 2013,12,19 COMPANY BCDX 156167 L 2013,12,28 2013,12,31 file3: COMPANY ABCD 764200 E 2013,12,13 2013,12,17 COMPANY BCDX 156167 L 2013,11,30 2013,12,03 COMPANY BCYX 165230 L 2013,12,13 2013,12,17 COMPANY BCYX 156095 L 2013,11,30 2013,12,08 #### #!/usr/bin/perl # use strict; use warnings; use Date::Calc qw( Delta_Days ); my @entries=(); ## hold my entries open (my $file, '<', (@ARGV)) or die $!; while (<$file>) { my @flds = split '\s+', $_; s/\s+$//; ## load my entries my $entry; $entry->{COMPANY} = $flds[0]; $entry->{CAR_PART_1} = $flds[1]; $entry->{CAR_PART_2} = $flds[2]; $entry->{LE} = $flds[3]; $entry->{BEG_DATE} = $flds[4]; $entry->{END_DATE} = $flds[5]; ## Push $entry onto @entries push (@entries, $entry); } close $file; foreach my $ent (sort @entries) { my @ymd1 = split ',',$ent->{BEG_DATE}; my @ymd2 = split ',',$ent->{END_DATE}; my $diff = Delta_Days(@ymd1, @ymd2); if ($diff < 5) { next; } else { ## this is where I need logic for grabbing only the record with the most days printf "$ent->{CAR_PART_1} $ent->{CAR_PART_2} $ent->{LE} $ent->{BEG_DATE} $ent->{END_DATE} $diff\n"; ## testing output } } exit;