#!/usr/bin/perl use strict; my %saldi; my $file; while () { chomp; next unless $_; $file = $1, next if /(\w+\.txt)$/; # Required for sample code only my @cellen = ( split /,/, )[ 3, 4 ]; next unless $cellen[0] && $cellen[1]; $saldi{$file}{ $cellen[0] } += $cellen[1]; # file name as primary key } my $dSum = 0; my $cSum = 0; my $deltaSum = 0; foreach my $filename ( keys %saldi ) { $cSum += $saldi{ $filename }{ C }; $dSum += $saldi{ $filename }{ D }; my $delta = $saldi{ $filename }{ D } - $saldi{ $filename }{ C }; $deltaSum += $delta; printf "$filename delta:\t%8s\n", big_money( $delta ); } printf "C sum: \t%16s\n", &big_money( $cSum ); printf "D sum: \t%16s\n", &big_money( $dSum ); printf "Delta sum:\t%16s\n", &big_money( $deltaSum ); sub big_money { #Learning Perl my $number = sprintf "%.2f", shift @_; #Add one comma each time though the do-nothing loop 1 while $number =~ s/^(-?\d+)(\d\d\d)/$1,$2/; #Put the dollar sign in the right place $number =~ s/^(-?)/$1/; $number; } __DATA__ Data_1.txt 394,eur,2006,D,18.20 394,eur,2006,D,22 394,eur,2006,C,25 Data_2.txt 494,eur,2006,C,25 494,eur,2006,D,79 #### Data_1.txt delta: 15.20 Data_2.txt delta: 54.00 C sum: 50.00 D sum: 119.20 Delta sum: 69.20