|
>>2390 スナフキン open(DAT, "+<$dat_file") || open(DAT "+>$dat_file") || &error('..'); while(<DAT>){ .. } ってのはどうでしょうね。 あと、perlopentut(1) に参考になることが書いてあるかも (書いてないかも) しれません。 |
|
ウチのマシンの perl はバージョンが古く(5.004_04)なので perlopentut の情報は見つけられませんでした。 しかしキーワードを検索するといろいろと情報を得る事が出来ました。 if(!open〜 は自分なりの書式なので良く使っていましたが、perlで 杓子定規に覚える事にはあまり意味が無いですね(笑) いままで使った事の無い sysopen もいろいろ試してみます。 的確なキーワードありがとうございます。 参考になったURL http://www.wingworld.co.jp/forum/cgi/messages/1931.html う〜んバージョンを新しくしなければ・・・ |
|
>>2384 68user > select か何かでバッファに たまっているリクエストを > 全て解釈しようとしていた、ということですかね? この辺の仕様(というか実態)は知りませんが サーバにどのようなリクエストが実際に渡ったのかを 調べるのが、原因究明の早道となるような気がします。 # 実際どのようにすれば, それを調べられるかは分かっていません。 今回の件に関しては, なんとなく > 一気に USER、PASS、LIST を送って、その後 リプライを受け取る のが原因かな。 と特に根拠も無くアタリをつけてテストをしました。 別に sleep である必要は全然無いのですが 個別にリプライを受けて -ERR だったら再入力な スクリプトを書くの面倒だったので… (あと環境が Windows でしたので) >>2390 スナフキン > こんなケースにはどんな処理をしているか 実際にファイルが存在していないのですから オープンエラーで困る事は無いのだし むしろエラーになってくれなくては困るという 考え方をしています。 …↑ゴミレスですね。すみません。 |
|
UNIX プログラミング FAQが以下に移転しています。 http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_toc.html http://www.adl.nii.ac.jp/~moro/ 暫定っぽいですが(^^; |
|
Cクラス(HP UNIX版)ハードDiskをBクラス使用するとき何か 設定必要でしょうか ? 教えって下さい。 |
|
access.logは下記のようなもの。$1はエポックタイム (1970/1/1 00:00:00からの経過秒数)で$3はアクセスした端末のIP。 1009379443.542 20 192.168.16.17 TCP_HIT/200 1694 GET http://www.al4a.com/images/911.gif - NONE/- image/gif 1009379443.604 24 192.168.16.17 TCP_HIT/200 10159 GET http://www.al4a.com/honor.gif - NONE/- image/gif 1009379444.170 11683 192.168.16.17 TCP_REFRESH_HIT/200 59687 GET http://www.al4a.com/links.html - DIRECT/www.al4a.com text/html 1009379446.523 2979 192.168.16.17 TCP_HIT/000 11027 GET http://www.al4a.com/images/al4av2.jpg - NONE/- - 1009379446.526 1472 192.168.16.17 TCP_MISS/000 0 GET http://counter7.tracker.com/c5/id/0/104406 - DIRECT/counter7.tracker.com - 1009379447.026 63 192.168.16.17 TCP_HIT/200 15976 GET http://www.al4a.com/banners/gf1.gif - NONE/- image/gif 1009379447.364 16 192.168.16.17 TCP_HIT/200 10159 GET http://www.al4a.com/honor.gif - NONE/- image/gif 1009379448.331 967 192.168.16.17 TCP_MISS/200 9626 GET http://counter7.tracker.com/c5/id/0/104406 - DIRECT/counter7.tracker.com image/gif 1009379449.997 1504 192.168.16.17 TCP_HIT/200 20456 GET http://www.pornleo.com/banner/pussy10-29.gif - NONE/- image/gif 1009379450.256 3056 192.168.16.17 TCP_HIT/200 15679 GET http://www.al4a.com/images/al4av2.jpg - NONE/- image/jpeg 1009379453.262 148 192.168.16.17 TCP_HIT/200 7049 GET http://www.al4a.com/banners/fc1.jpg - NONE/- image/jpeg 1009379453.301 38 192.168.16.17 TCP_HIT/200 9328 GET http://www.al4a.com/banners/am1.gif - NONE/- image/gif 1009379454.056 1963 192.168.16.17 TCP_HIT/200 21921 GET http://al4a.free6.com/free6.gif - NONE/- image/gif これを集計して date time user数 ---------------------- 2001/12/28 00:00 0 2001/12/28 00:30 0 2001/12/28 01:00 5 2001/12/28 01:30 6 のようにしたいのです。awkファイルは3つあり、それをshellに記述して 一括処理しようとしています。 #syukei.sh #!/bin/sh ./syukei1.awk access.log|./syukei2.awk|./syukei3.awk > file #syukei1.awk #!/bin/gawk -f { hour=strftime("%H",$1);minute=strftime("%M",$1);second=strftime("%S",$1) base=$1-(hour*3600+minute*60+second) for(i=1;i<=48;i++){ if((base+1800*(i-1) <= $1) && ($1 < base+1800*i)){ print strftime("%Y/%m/%d %H:%M",base+1800*(i-1)),$3,1 } } } #syukei2.awk #!/bin/gawk -f { sum[$2,$3] += $4 } END { for(item in sum){ split(item, t, SUBSEP ); printf("%s %s %s %d\n",$1,t[1],t[2],sum[item]); } } #suykei3.awk #!/bin/gawk -f { if(length($2) > 0){ kazu[$2] ++; } } END{ for(i in kazu){ print $1,i,kazu[i] } } といった感じです。syukei1.awkで 2001/12/28 00:00 192.168.1.2 1 2001/12/28 00:00 192.168.1.1 1(とりあえずエポックタイムを現在時刻に変換し、秒の項はprintしない。あとはIPaddressを取る) のように加工します。(最後の1は捏造したもの。後々この数をカウントするので) syukei2.awkで↑の$4を集計。 2001/12/28 00:00 192.168.1.2 5 2001/12/28 00:00 192.168.1.1 6 : 2001/12/28 00:30 192.168.1.1 2 2001/12/28 00:30 192.168.1.2 4 のように加工します。(userごとに30分刻みで何回アクセスしたか) 最後にsyukei3.awkで↑の$3を集計。 2001/12/28 00:00 2 2001/12/28 00:30 3 のようにdate time user数という形で出力したいんです。 ただ、ここで今問題になっているのが、例えば2001/12/28 01:00〜2001/12/28 01:30の間に一度もアクセスがなかった場合、 その行が表示されません。アクセスがない場合は2001/12/28 01:00 0 0のように表示したいのですが、 どのようにすればいいでしょうか。また、3つファイルがあるんですが、これを一まとめにすることって可能なんでしょうか。 長くなりましたが、ご教授宜しくお願いします。 |