1

我有一个问题,我不知道如何解决。我有一个包含大约 250k 行的巨大日志文件,每行信息间隔一分钟(即 09:00:00、09:01:00 等),而不是在电子表格中提取我需要的每一行,我想通过脚本来做。虽然我在脚本方面还没有那么丰富的经验,但我正在努力学习 Perl。

我想要做的是:提取与时间戳匹配的每一行(09:03:00、09:18:00、09:33:00、09:48:00)并将其打印到新文件中。

这是我实现这一目标的可怕错误尝试

#!/usr/bin/perl
use warnings;
use strict;
use diagnostics;

my @expression = ( '09:03:00', '09:18:00', '09:33:00', '09:48:00' );
open FILE, "logfile.txt" or die $!;
if (FILE =~ @expression) {
print "$_\n";
}
4

2 回答 2

3

您并没有真正在代码中使用正则表达式。你想要的表达方式是

my $expression = /09:(03|18|33|48):00/

用于扫描文件的代码也可能不起作用。更标准的方法是

while(<FILE>)
{
  if(/$expression/) { print; }
}

或者

while(<FILE>)
{
  if($_ =~ $expression)
  {
    print "$_\n";
  }
}
于 2013-02-17T14:32:29.650 回答
2

像这样:

open FILE, "logfile.txt" or die $!;
print grep /09:(03|18|33|48):00/, <FILE>;
close FILE or warn $!;

但是不需要perl,即:

grep '09:\(03\|18\|33\|48\):00' logfile.txt > output.txt
于 2013-02-17T14:41:21.860 回答