У меня есть CSV-файл (очень большой) со следующим форматом.
key1,val1,val2,val3... ,valn
key2,val2,val5,val1....,valn
...
...
keyn,val7,val9,val11....,valn
key1,val2,val4,val8.....,valn
key2,val10,val12,val14..., valn
...
...
keyn,val2,val4,val8.....,valn
key1,val3,val5,val7... ,valn
key2,val0,val9,val3....,valn
key1 to keyn (и их значения) повторяется несколько раз в CSV-файле.
значения (val1, valn) являются двойными (с плавающей точкой).
что я хочу напечатать:
1) В начале файла для каждого ключа я хочу вычислить разницу между значениями столбца (val2,val4, val6, например) до следующего вхождения ключа.
, например,
key1,2,4,6
key2,3,5,7
...
...
key1,4,6,8
key2,4,6,8
Я хочу напечатать
key1: Отличие от предыдущей записи - это key1, 2,2,2 key2: отклонение от предыдущей записи - key2,1,1,1 ..
keyn: отклонение от предыдущей записи ...........
2) Делайте это несколько раз для каждого последующего вхождения каждой клавиши.
Вот что я придумал (сохранение значений в хэше)
#!/usr/bin/perl
my %hash;
open my $fh, '<', 'file1.csv' or die "Cannot open: $!";
while (my $line = <$fh>) {
$line =~ s/\s*\z//;
my @array = split /,/, $line;
my $key = shift @array;
$hash{$key} = \@array;
}
close $fh;