У меня запущено несколько процессов, которые создают данные с разной скоростью. Я хотел бы использовать Perl для идентификации тех экспериментов, которые не создавали данные более 1 часа, чтобы завершить их раньше. Файл журнала выглядит примерно так (генерируется каждые 15 минут, сокращается для удобства чтения):
# Dataset,Timestamp,dataset size
exp-201905040115a,1556932502,0
exp-201905040115b,1556932502,0
exp-201905040115a,1556934301,213906
exp-201905040115b,1556934301,25487
exp-201905040115a,1556936102,399950
exp-201905040115b,1556936102,210548
exp-201905040115a,1556937002,399950
exp-201905040115b,1556937002,487250
exp-201905040115a,1556937902,399950
exp-201905040115b,1556937902,487250
exp-201905040115a,1556938802,399950
exp-201905040115b,1556938802,502145
exp-201905040115a,1556939701,399950
exp-201905040115b,1556939701,502145
exp-201905040115a,1556940601,399950
exp-201905040115b,1556940601,502145
exp-201905040115a,1556941502,399950
exp-201905040115b,1556941502,502145
exp-201905040115a,1556942401,399950
exp-201905040115b,1556942401,502145
Первый размер набора данных обычно равен 0, но иногда небольшое число (<100). </p>
Я уже научился читать данные из файла журнала и проверять их построчно (или, возможно, превратить эту строку в массив для извлечения записей столбцов).
#!/usr/bin/perl
use warnings;
use strict;
my @datasets = ( 'exp-201905040115a', 'exp-201905040115b' );
foreach my $dataset (@datasets) {
open my $logfile, '<', 'data.log' or die "Cannot open: $!";
while (my $line = <$logfile>) {
chomp $line;
my ( $log_dataset, $log_timestamp, $log_datasize ) = split /,/, $line ;
if ( $dataset eq $log_dataset ) {
print "Matched: " , $dataset, "\t" ;
printf('%10d', $log_datasize) ;
print " at " , $log_timestamp , "\n" ;
}
}
close $logfile;
}
Я немного озадачен тем, как поступить с той частью, которая сообщает мне, произошло ли какое-либо изменение в третьем столбце за последние 3600 секунд. Я думаю, мне нужно сравнить значения из разных строк друг с другом, но здесь так много для сравнения?
Кроме того, есть ли более эффективный способ, чем просмотр всего файла журнала несколько раз (по одному разу для каждого набора данных)?
Может кто-нибудь дать мне предложение? Спасибо!