use Modern::Perl; use Data::Dump qw/dump/; my %seen; my %accounts; my $g_total; while () { next if $seen{$_}++; my ( $account_number, $amount ) = ( split /,/ )[ 2, 7 ]; @{ $accounts{$account_number} }[0] += $amount; @{ $accounts{$account_number} }[1]++; $g_total += $amount; } say dump( \%accounts ); say "Grand Total = $g_total"; __DATA__ Joe Smith,12345678,44552,02/11/2011,no email, MA,USA,900.00,updated Joe Smith,12345678,44552,02/11/2011,no email, MA,USA,900.00,updated Joe Smith,12345678,44552,02/11/2011,no email, MA,USA,900.00,updated Cindy Abbot,122233678,01122,08/09/2012,test@tok.com, CA,EUR,-120.00,updated Mary Lou,33456678,44552,01/11/2011,no email, MA,USA,400.00,updated SMith Doo,12345678,44592,02/11/2012,test@test.com, MA,USA,100.00,updated Mario Att,00056789,022345,03/10/2010,no email, MA,USA,40.00,outdated Mario Att,00056789,022345,03/10/2010,no email, MA,USA,40.00,outdated Mario Att,00056789,022345,03/10/2010,ok@ok.com, MA,USA,40.00,outdated Maria Smither,12345678,00051,02/11/2011,no email, MA,USA,750.00,outdated Dan Smither,12345678,00051,02/11/2011,no email, MA,USA,250.00,outdated