RosettaCodeData/Task/CSV-data-manipulation/Perl/csv-data-manipulation-1.pl

39 lines
831 B
Perl

#!/usr/bin/perl
use warnings;
use strict;
use List::Util 'sum';
my @header = split /,/, <>;
# Remove the newline.
chomp $header[-1];
my %column_number;
for my $i (0 .. $#header) {
$column_number{$header[$i]} = $i;
}
my @rows = map [ split /,/ ], <>;
chomp $_->[-1] for @rows;
# Add 1 to the numbers in the 2nd column:
$_->[1]++ for @rows;
# Add C1 into C4:
$_->[ $column_number{C4} ] += $_->[ $column_number{C1} ] for @rows;
# Add sums to both rows and columns.
push @header, 'Sum';
$column_number{Sum} = $#header;
push @$_, sum(@$_) for @rows;
push @rows, [
map {
my $col = $_;
sum(map $_->[ $column_number{$col} ], @rows);
} @header
];
# Print the output.
print join(',' => @header), "\n";
print join(',' => @$_), "\n" for @rows;