Вам необходимо использовать приличный парсер CSV, чтобы справиться со всеми сложностями формата CSV. Text :: CSV_XS (или Text :: CSV , если это не доступно) - один из предпочтительных.
perl -e '{use Text::CSV_XS; my $csv=Text::CSV_XS->new(); open my $fh, "<", "file.csv" or die "file.csv: $!"; my $sum = 0; while (my $row = $csv->getline ($fh)) {$sum += $row->[4]}; close $fh; print "$sum\n";}'
Вот фактический код Perl, для лучшей читаемости
use Text::CSV_XS; # use the parser library
my $csv = Text::CSV_XS->new(); # Create parser object
open my $fh, "<", "file.csv" or die "file.csv: $!"; # Open the file.
my $sum = 0;
while (my $row = $csv->getline ($fh)) { # $row is array of field values now
$sum += $row->[4];
}
close $fh;
print "$sum\n";
Выше можно сократить, используя немного меньшее качество, но более плотный Perl :
cat file.csv | perl -MText::CSV_XS -nae '$csv=Text::CSV_XS->new();
$csv->parse($_); @f=$csv->fields(); $s+=$f[4]} { print "$s\n"'