68user's page 掲示板

Prev< No. 2399> Next  [最新発言に戻る] [過去ログ一覧]
No. 2399 # ふくし 2002/01/02 (水) 19:59:37
>>2398 hogehoge
さん:Perl ですいません。こんなんでできそうです。
要は、
ファイルの各レコードについて、
0:00〜0:30、0:30〜1:00、1:00〜1:30、、の各ゾーンに入っているか調べ、
そのゾーンに入っていたら
ゾーン、IP アドレスをキーに持つ2次元ハッシュの値を1にし、
全件調べた後に各ゾーンごとにいくつ IP がたまっているかを出力しています。
ろくにテストしていませんがバグっていたらすみません。


#! perl -w

use Time::Local; # timelocal 関数を使うために必要なモジュールの宣言

(undef,undef, undef, $mday, $mon, $year, undef, undef, undef) = localtime(time); # 今日が何日か
$step = 30 * 60; # 30分刻み

$next = timelocal(0, 0, 0, $mday, $mon, $year); # 今日の0時0分0秒の時刻(epoch からの秒数)
$start = $next - 60 * 60 * 24; # 昨日の0時0分0秒の時刻

%result = ();
while(<DATA>) {
                ($now, undef, $ip) = split;
                for ($from = $start; $from < $next; $from += $step) { # $from は計算開始の時刻
                                $to = $from + $step; # $to は計算終了の時刻
                                if ($from <= $now and $now < $to) {
                                                $result{$from}{$ip} = 1;
                                }
                }
}

for ($from = $start; $from < $next; $from += $step) {
                $num = keys %{$result{$from}};
                ($sec, $min, $hour, $mday, $mon, $year) = localtime($from);
                $year += 1900;
                $mon++;
                print "$year/$mon/$mday $hour:$min:$sec $num\n";
}

Prev< No. 2399> Next  [最新発言に戻る] [過去ログ一覧]