68user's page 掲示板

Prev< No. 2397〜2402> Next  [最新発言に戻る] [過去ログ一覧]
No. 2397 # ふくし 2002/01/02 (水) 16:16:42
あけましておめでとうございます。
今年もよろしくお願いします。
>>2396 hogehoge
さん:はじめまして
cronで30分に1回httpを叩くクライアントを作っておいて、
そいつ1回しかアクセスしなかったら0アクセス、
そいつも含めてn回アクセスがあったらn-1アクセスではだめですかねー。

No. 2398 # hogehoge 2002/01/02 (水) 17:12:32
あ…、明けましておめでとうございます。
ふくしさんはじめましてです。

今まではcronを使って30分ごとに集計をとる方法でした。
でも、処理に時間がやたらとかかってしまいまして。
それが1日48回もあるかと思ったら…。
それでプログラムの改善と一括処理に切り替えることにしたんですが。
どうにかならないもんですかね…。ふぅ。

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";
}

No. 2400 # ふくし 2002/01/02 (水) 20:32:15
すいません、<DATA> でなくて
<STDIN> にして標準入力を渡すか、
ファイルハンドルをオープンしてつかってください。
テスト用のコードを修正しわすれました。

No. 2401 # hogehoge 2002/01/03 (木) 00:57:16
ふくしさんありがとうございます。
Perlをそのまま使うことができないのがとても残念ですが、
まだawkも始めたばっかりで、アルゴリズムの解釈なんかが
多々間違っていると思われ、とても参考にさせて頂きたいと思います。
なんとか、awkに変換、反映させてみたいと思います。
とりあえず、このスクリプトがうまくいったら、次は
Perlをやってみたいと思っています。ありがとうございました。
また何かあったら教えて下さいね。

No. 2402 # 名無しさん 2002/01/03 (木) 19:39:40
>>2401 hogehoge
see http://pc.2ch.net/test/read.cgi/unix/1000303370/130-132n
and
http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse

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