Существует этот большой файл журнала меняется почти каждый второй линиями, как следующее:Perl: Как заставить Perl запомнить последнюю строку, которую она читала?
013-07-10 17:59:08 +0900 "app.log_count":0,"
013-07-10 17:59:09 +0900 "app.log_count":4,"
013-07-10 17:59:10 +0900 "app.log_count":1,"
013-07-10 17:59:12 +0900 "app.log_count":5,"
Я делаю скрипт, который читает этот журнал. В частности, он пытается проверить, если «app.log_count» часть выходит за пределы определенного порога:
open my $infile, "<", $file_location or die("$!: $file_location");
while (<$infile>) {
if ("app.log_count":(\d+)) {
if ($_ >= $threshold) {
# warning
} else {
# not warning;
}
}
}
close $infile;
Что я планирую запустить каждую минуту, как хрон.
Но я хочу создать сценарий, который не запускает весь файл каждый раз. Если скрипт читает каждый файл журнала каждую минуту, и мы предполагаем, что в минуту t появится регулярное выражение, оно отправит уведомление по почте; то в минуту t + 1, когда скрипт снова запустится, он отправит другое почтовое уведомление, даже если не было «нового совпадения».
Так что мне нужно создать сценарий , который запоминает последнюю позицию (строку), которую он читает,, поэтому в следующий раз он начинает считывать с этой позиции. Есть идеи? Всего хорошего, Адриан.
Используйте РАССКАЖИ() и искать() –
возможный дубликат [Perl: Regex для чтения журнала о] (http://stackoverflow.com/questions/17566296/perl-regex-for-reading-a-log-statement) –
Возможно, ['File :: Tail'] (http://search.cpan.org/perldoc?File%3A%3ATail) - это то, что ты ищешь. – TLP