В псевдокоде вы бы сделали что-то вроде этого:
- читать в файле построчно:
- парсит метку времени для этой строки.
- если оно меньше времени начала, перейдите к следующей строке.
- если оно больше, чем время окончания, перейдите к следующей строке!
- else: это строка, которую вы хотите: распечатать.
Это может быть слишком сложным для ваших нужд, но оператор триггер ..
сразу приходит на ум как нечто, что было бы здесь полезно.
Для чтения в файле из stdin это обычный шаблон:
while (my $line = <>)
{
# do stuff...
}
Разбор строки в поля можно легко выполнить с помощью split
(см. perldoc -f split ). Возможно, вам потребуется разделить строку на табуляцию или пробел, в зависимости от формата.
Как только вы получите конкретное поле (содержащее метку времени), вы можете проверить его с помощью пользовательского регулярного выражения. Читайте о них на perldoc perlre .
Вот кое-что, что может приблизить вас:
use strict;
use warnings;
use POSIX 'mktime';
my $starttime = mktime(33, 52, 12);
my $endtime = mktime(33, 59, 12);
while (my $line = <>)
{
# split into fields using whitespace as the delimiter
my @fields = split(/\s+/, $line);
# the timestamp is the 3rd field
my $timestamp = $fields[2];
my ($hour, $min, $sec) = split(':', $timestamp);
my $time = mktime($sec, $min, $hour);
next unless ($time < $starttime) .. ($time > $endtime);
print $line;
}