Chinaunix

标题: 请教这个日志分析的循环程序该怎么写好 [打印本页]

作者: Ksharp    时间: 2007-03-07 17:35
标题: 请教这个日志分析的循环程序该怎么写好
环境为 Windows          Active Perl 5.8.8

现在有很多按照每天的日期命名的zip文件包,名字格式为ex070301.zip,里面为IIS产生的24个小时的日志文件,名字格式为ex07030100.log-ex07030124.log
现在想要在从1月9号到2月28号的iis日志里面搜索某个关键字(比如是key),并统计关键字出现的行数,把结果输出(类似cat ex070301*.log|grep "key"|wc -l)。因为硬盘空间太小,没法一次性都解压完,所以只能解压一天,分析,返回行数,删除掉,再解压第二天,分析,返回行数,删除,如此反复直到2月28号。

小弟初学Perl,还请大家多多帮忙,看看这个怎么实现,感激不尽!

[ 本帖最后由 Ksharp 于 2007-3-7 17:37 编辑 ]
作者: Ksharp    时间: 2007-03-07 17:42
取文件名都写好了

  1. my $n;
  2. @date=localtime(time-$n*86400);
  3. my $shortyear = sprintf("%02d", ($date[5]+1900) % 100);
  4. my $mon = sprintf("%02d",$date[4]+1);
  5. my $day = sprintf("%02d",$date[3]);
  6. my $prefix = "ex";
  7. my $name = "$prefix$shortyear$mon$day";     
  8. my $zipfile = "$name.zip";
复制代码

后面的就卡住了,不知道这个循环该怎么设计
作者: 路小佳    时间: 2007-03-07 18:04
这儿有个demo

  1. #!/usr/bin/perl -W
  2. #
  3. # File: pkcat.pl
  4. # License: GPL-2

  5. use strict;
  6. use warnings;
  7. use Archive::Zip qw( :ERROR_CODES :CONSTANTS );

  8. sub pkcat($) {
  9.     my $zipfile = shift;
  10.     my $pkzip = Archive::Zip->new();
  11.     if ($pkzip->read($zipfile) != AZ_OK) {
  12.        die "Read error: $!";
  13.     }

  14.     my @files = $pkzip->memberNames();
  15.     foreach my $file (@files) {
  16.         print "[$file]\n", ($pkzip->contents($file))[0], "\n\n";
  17.     }
  18. }

  19. pkcat('test.zip');
复制代码

作者: 路小佳    时间: 2007-03-07 18:08
具体可以看
http://search.cpan.org/~adamk/Archive-Zip-1.18/lib/Archive/Zip.pm
作者: Ksharp    时间: 2007-03-08 10:24
多谢楼上的指点,但是这个只是说怎样处理压缩包,我要的还有1楼的那些要求,另外,最重要的是怎样处理循环,谢谢各位




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2