#!/usr/bin/perl my $read_dir = ""; # ← apache のログ用ディレクトリを記述します my $read_file = ""; # ← apache のログファイルから拡張子を除いた文字列を記述します my $write_dir = ""; # ← awstats で work に使用するディレクトリを記述します my $wrile_file = ""; # ← awstats でログとして使用するファイル名を記述します my @exclude_host = # ← ログ内から解析させたくないクライアントホスト名をカンマで区切って記述します ( "", "" ); my $READ_LOCK = 1; # 読み込み宣言ロック(ブロックモード) my $WRITE_LOCK = 2; # 書き込み宣言ロック(ブロックモード) my $READ_LOCK_UNBLOCK = 5; # 読み込み宣言ロック(非ブロックモード) my $WRITE_LOCK_UNBLOCK = 6; # 書き込み宣言ロック(非ブロックモード) my $UNLOCK = 8; # ロック解除(アンロック) my $true = 1; my $false = 0; sub main { chdir($read_dir); my @first = glob("*"); my $second; foreach my $name (@first) { if (index($name, $read_file) < 0) { next; } $second[++$#$second] = $name; } @second = sort { length $a <=> length $b || $a cmp $b } @second; # 文字列の短い順、拡張子番号順 # foreach my $name (@second) # { # printf "$name\n"; # } @file = reverse(@second); # 逆順に並べ替えることで日時順となる open(OUT, "> $write_dir$wrile_file"); # 書込みオープン foreach my $name (@file) # ソート順にファイルを読込 { open(IN, "< $name"); # 読込オープン flock(IN, $READ_LOCK); while() { my @line = split(/ /, quotemeta); my $host = $line[0]; my $exclude = $false; foreach my $ex_hostname (@exclude_host) { if (index($host, quotemeta($ex_hostname)) >= 0) { $exclude = $true; last; } } if ($exclude != $false) { next; } print OUT $_; } close(IN); # クローズしたらロックは自動的に解除される } close(OUT); # 書込みクローズ } main; 1;