#!/usr/bin/perl -wl
use POSIX qw(strftime);
my $last;
my @bar;
while(<>) {
chomp;
my @foo=split ",";
next unless $foo[0];
my $date=qx(date +%s -d $foo[0]);
next unless $date;
my $this=int($date);
next unless $this;
if($last) {
my $diff=$this - $last;
if ($diff>300) {
my @m;
$m[$_]=($foo[$_]-$bar[$_])/$diff foreach(1..$#foo);
my @b;
$b[$_]=$foo[$_]-$m[$_]*$this foreach(1..$#foo);
for(my $t=$last+300; $t<=$this-300; $t+=300) {
my @y;
push @y, strftime(qq("%Y-%m-%d %H:%M:%S"),localtime $t);
push @y, $m[$_]*$t + $b[$_] foreach(1..$#foo);
local $"=q(,);
print "@y";
}
}
}
$last=$this;
@bar=@foo;
}
continue { print }
El script aún se puede perfeccionar, creo que me sobran unas cuántas líneas, y por supuesto, hay que bautizar las variables @foo y @bar por algo más apropiado.