我遇到了一个我不确定如何解决的问题。我有一个大约2.5万行的巨大日志文件,每行信息分开一分钟(即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";
}
答案 0 :(得分:3)
您并没有在代码中使用正则表达式。你想要的表达是
my $expression = /09:(03|18|33|48):00/
扫描文件的代码可能也不起作用。更标准的方法是
while(<FILE>)
{
if(/$expression/) { print; }
}
或
while(<FILE>)
{
if($_ =~ $expression)
{
print "$_\n";
}
}
答案 1 :(得分: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