1

解決方法がわからないという問題があります。約25万行の巨大なログファイルがあり、情報の各行は1分ごとに区切られています(つまり、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 に答える