设为首页 收藏本站
查看: 1214|回复: 0

[经验分享] perl日志分析

[复制链接]

尚未签到

发表于 2018-8-31 08:48:08 | 显示全部楼层 |阅读模式
  转载于:http://blog.chinaunix.net/uid-20488859-id-1941150.html
  #!/usr/bin/perl
  use strict;
  use Getopt::Std;
  use vars qw($opt_d $opt_s $opt_e $opt_k $opt_g %date_format @filename $keyword $regular);
  sub Usage
  {
  print "Usage: parselog  [filename]n";
  print  '(d{4})',
  'y' => '(d{2})',
  'm' => '([0-1]{1}d{1})',
  'L' => '(d{1,2})',
  'd' => '(d{2})',
  'D' => '(d{1,2})',
  'H' => '([0-2]{1}d{1})',
  'M' => '(d{2})',
  'n' => '(d{2})',
  'S' => '(d{2})',
  's' => '(d{1,2})',
  'I' => '([0-1]{1}d{1})',
  'k' => '(d{1,2})',
  'l' => '(d{1,2})',
  'p' => '(am|pm)',
  'w' => '(d{1})',
  'a' => '(Mon|Tues|tue|Wed|Thurs|Fri|Sat|St|Sun)',
  'A' => '(Monday|Tuesday|Wednesday|midweek|Thursday|Friday|Saturday|Sunday)',
  'b' => '(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sept|sep|Oct|Nov|Dec)',
  'B' => '(January|February|March|April|may|June|July|August|September|october|november|december)'
  );
  my ($string, $start_time, $end_time, $line_time);
  Options;
  if ($opt_d || $opt_k) {
  if ($opt_d) {
  $string = Parse_regular($opt_d);
  $start_time = Parse_time($opt_s, $string);
  $end_time = Parse_time($opt_e, $string);
  Usage if (($start_time == -1) || ($end_time == -1));
  }
  my $handle;  #文件描述符
  my $multi_line = 0; #多行标识
  my $key_flag = 0; #关键字匹配标识
  my @multiline;
  for(my $k = 0; $k < @filename; $k++) {
  my $file = shift @filename;
  if ($file ne 'STDIN') {
  unless (-r $file) {
  print &quot;Read $file failed!n&quot;;
  exit -2;
  }
  open (F, &quot;$file&quot;) || die &quot;open $file error!&quot;;
  $handle = 'F';
  } else {
  $handle = 'STDIN'; #从管道读取
  }
  while (my $lines = ) {
  if ($opt_k && !$opt_d) {
  print &quot;$lines&quot; if ($lines =~ /$keyword/i);
  next;
  }
  if ($opt_d && !$opt_k) {
  $line_time = Parse_time($lines, $string);
  next if (($multi_line == 0) && ($line_time < $start_time));
  last if ($line_time > $end_time);
  if ($line_time >= $start_time && $line_time  $end_time) && ($key_flag == 0));
  if (($line_time == -1) && ($multi_line == 1)) {
  if ($lines =~ /$keyword/i) {
  push (@multiline, $lines);
  $key_flag = 1;
  } else {
  push (@multiline, $lines);
  }
  next;
  }
  $multi_line++;
  if ($multi_line > 1) {
  if ($key_flag == 1) {
  while (my $buff = shift @multiline) {
  print $buff;
  }
  }
  $multi_line = 1;
  $key_flag = 0;
  }
  @multiline = ();
  push (@multiline, $lines);
  if ($lines =~ /$keyword/i) { #时间+关键字=单行匹配
  next if (($line_time != -1) && ($line_time < $start_time));
  last if ($line_time > $end_time);
  if ($line_time >= $start_time && $line_time  1);
  }
  } else {
  Usage;
  }


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-559150-1-1.html 上篇帖子: 安装perl的CPAN模块整理 下篇帖子: Perl批量执行Linux安装程序和脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表