作成 2015.10.30
更新 2015.10.30
Perl で Squid のログを分離する
ダブルクォートが混じった Squid などのログを、要素ごとに分離した配列として返します。
# で始まるコメント行は分離せず、要素1個の配列として返します。
sub log_split{
  my $str = $_[0];
  my @ret = ();
  if($str =~ /^#/){
    $ret[0] = $str;
    return @ret;
  }
  my @replace = ();
  my $counter = 0;
  while($str =~ /^([^"]*?)"(.+?)"(.*)$/){
    $str = $1."__リプレ_${counter}__".$3;
    $replace[$counter] = $2;
    $counter++;
  }
  @ret = split(/ +/,$str);
  my $j=0;
  for(my $i=0;$i<$counter;$i++){
    for(;$j<=$#ret;$j++){
      if($ret[$j] eq "__リプレ_${i}__"){
        $ret[$j] = $replace[$i];
        last;
      }
    }
  }
  return @ret;
}
使い方
my $file = "squid.log";
open my $fh, "<$file";
while(<$fh>){
  my @elements = &log_split($_);
}
close $fh;
タグ: Perl

©2004-2017 UPKEN IPv4