SCMLife.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5100|回复: 0

[Perl] sed简单封装----将时间参与逻辑运算提取log

[复制链接]
发表于 2014-9-1 16:07:39 | 显示全部楼层 |阅读模式
本帖最后由 quake 于 2014-9-1 16:08 编辑 ' i6 l1 G9 h" k  M, R. a

2 M2 {& J  _, p% ]" P* ]sed命令通过关键字截取log。这里将时间转换参与逻辑运行。
6 e8 F' d3 S- h3 h* B提高log提取准确性。
: L6 G1 p& R) \5 [- S# v3 T0 _% S$ X# M! ~% ]2 M1 o

0 R# C% q" n' F" {#!/usr/bin/perl
( j0 F1 P% i% j' X9 P
- Q3 E# @* N& I1 n- b' s# Copyright Statement:! T4 J0 v0 D1 N
# --------------------; w8 M5 h/ S7 m( V9 B, p6 e
# This file is the tool to get the log
& s7 [% e* X) G" k6 m# Between the time A and time B;8 p5 R; W* ~& c/ e; K: G( @0 e
# Attention:Ensure the system have the sed commond!
4 A& z1 D) q$ E+ V9 e: }# O# @Author: hakisman@gmail.com& ~2 E1 U3 x3 g8 L, z& M7 a
# Date: 2014.2.17#
& A1 O& W7 f; Y! o- \
$ a0 ]9 t8 p% b: gmy $TargetFile = "$ARGV[0]";
4 o' L1 B/ t2 imy $StartTime = "$ARGV[1]";2 G8 p# P3 h6 O1 e- @
my $EndTime = "$ARGV[2]";- e$ p" y/ M+ h# X
my $OutPutFile = "$ARGV[3]";
  z) {3 g+ K1 \  l! h- e, P: e9 a" j/ B9 M/ `; s' ]8 M. r
if($#ARGV<3){
! L+ {1 H+ U+ z    print "ERROR:The number of parameters is wrong!\n";3 [. s: n# g) h
    &Usage;
, N7 @% e* M: l}. {9 B6 q0 U  D* Y  B* v6 }# Y
if(($StartTime =~/[^0-9]+/)||($EndTime =~/[^0-9]+/)||($EndTime<=$StartTime)){( q$ z. b2 l% L
  print "ERROR:The StartTime or Endtime is wrong!\n";4 w& u5 v) I, r$ U0 V* o) k+ w
  &Usage;
! c- H1 j# j5 X% y}
  e5 l! p2 S) \3 O. ~0 {7 L" o( B5 H  t( |+ u
my $startLineNumber = 0;# `. p) S  k5 {% `) O2 u* p# C
my $endLineNumber = 0;
! W* b2 F1 r# e3 v
& H  X/ L3 }0 R0 q1 Xmy $timelocation = 0;+ N7 r4 P* h0 E0 H
my $tempString;. Q, l. l( G0 Y5 t: X! X
* w( q1 w! j/ m7 }
if(-d $file){8 Y2 L) [% K7 {/ u- R
    print "ERROR:The TargetFile isn't exits!\n";( e3 j0 X' p% I9 @% J& r1 M
    &Usage;* P- v2 t6 ], F
}else{% G  l: z' x- u8 j6 Z9 w
    if(open (readfile,$TargetFile)){
2 G6 \4 M# X3 a/ j! _$ X    }else{( P: X, Q; k4 C0 v9 Q+ y; |
      print "ERROR:Read file is faild!\n";8 O  m" j# [; b' E
        #dir ("Open the file faild!\n");" G& E, j: F' K  l
    }  @7 \: ]( F' E! y; `
    #Waring this place put all the file into the Memroy.mybe cause the out of memroy!
- A) X3 g; P  \' y4 o1 Z; q1 u    my @FileArray = <readfile>;
% p' @. [& N& }$ Q, b% Y   
! q8 ?2 V. _4 m" O  Q    my $filelength = $#FileArray;6 C- Y! N" b# L. Q
    + {0 X8 ^1 a5 @% r; q/ G
    $endLineNumber = $filelength;! ?9 R/ h6 m& J$ O# N  I
    . w/ m. G0 ]; y$ R( b  ~
    my $i = 0;% e9 C- q# D+ f# R- B, P3 F
. \* n, d9 R$ D
    while($i<=$filelength){0 S1 |  e2 E8 J8 ^: L
        2 j# B& S. e* U
        $tempString = substr($FileArray[$i],10,5);4 H% m$ w/ _# \4 Y6 D
        #print $tempString."------\n";
$ ^$ `) u  h7 U        if(($startLineNumber==0)&&(index($tempString,":")==2)){
+ V- A: i$ m3 J! v4 U) E            $tempString =~ s/\://g;
4 N3 F8 c$ ^7 D: w" e3 B/ p                #print "$tempString\n";
5 I1 E7 O0 ^2 X7 \                    if($StartTime<=$tempString){                        6 @8 \& q+ R6 J9 z+ P( K9 c, X. g. y
                    $startLineNumber=$i;: F' i% l/ C& A: Z$ H
            }
: j" P/ E* L6 G3 K, `        }" k, A2 A7 |  H: M
        & ~6 R. [; K; y8 @2 _2 D* L
        if(($startLineNumber!=0)&&(index($tempString,":")==2)&&($endLineNumber==$filelength)){
1 |) A. g" v1 X* N# C: |          $tempString =~ s/\://g;' ?' N0 M" O  C* g1 N  E# Y
          #print "EndTime is $EndTime"."____number1 is $number1\n";4 z$ {; z1 l: V: j- a: Y. n: L
          if($EndTime<=$tempString){/ |; f- r' B& U( s8 l
              $endLineNumber=$i;    8 T: F- C/ v8 t, a) `
              &getLog;( R  F; C8 @5 o1 z. S! A3 L
          }2 i3 x8 i7 A# B  @
        }    " `( x# Y! s5 h9 g6 R3 F
        $i++;
- r6 W' T* K6 K# V# X    }
; L  D4 ~, Y' Y% [0 I1 x( h  \6 v    close(readfile);* b+ K9 u. `, b7 |0 _* `
}) A2 ^9 J: e: f* v0 {& f/ W' h

1 b1 Y/ i) n& p- b+ r) }% n, v4 y4 ?) [1 u8 Q2 I
sub getLog{% m; P) x0 C2 t6 n% X! t

5 w# X  i1 `7 g1 Y6 C: q  print "The log text is between the ".$startLineNumber." and ".$endLineNumber.";\n";
8 t: ]3 I7 s% b+ M: X0 m  my $command = "sed -n '".$startLineNumber.",".$endLineNumber."p' $TargetFile>".$OutPutFile;  
7 H. `9 K9 [# t! W  print $command."\n";/ n; I' X! R) P, I9 O
   
! j+ V8 y. S; v$ I    system($command);4 p0 z, F2 o( i4 J
            
# w$ r: i( N6 K! T/ S( Z8 C    exit();1 H  R0 L# Z6 {  D. F1 Q8 w7 p( d2 h
}+ P/ p7 d! {" p, w
) i- J& F3 y, T* \& ^2 E
sub Usage {
: Y; s6 K7 M' ?  Q, ^4 owarn << "__END_OF_USAGE";
0 R) S; Y" S( C9 W, h4 R  ~8 \/ A9 J/ M. _# ?6 Z! t
Hoops! you need read the usage!# |# l- @! N9 i' g
        
8 g7 h5 _4 F- {4 rUsage:
0 X" A( E# T& V5 l8 w" Y7 n1 ~& U. W$ d1 F# u
  getlog TargetFile StartTime EndTime OutPutFile$ ^) |& D+ e, _
  Attention: For 24-hour time-division。
; M2 u8 {- V, X6 q% y4 W( ?) S+ ^& A. H3 a) I
Example:
% m* L7 X2 Y( E& n# Y% A$ K1 t  getlog server.log 1530 1620 server_1530_1620.txt
! s' _: {# S3 A! K' P" ?  (Between the time A and time B)! H& l) W% k! f* [) J2 F2 T
  .....) ]; K( p1 `0 w6 Y
& A+ p+ S  W% w6 ^
__END_OF_USAGE
( h% E) V2 M+ e0 J! r8 q    % V/ H( B9 w9 ^. Z5 S
exit 1;% d$ ], f4 d! f8 A$ E
}
/ Z8 h2 I0 I7 ~' @7 _$ N2 Z4 m! l, Q* A6 E+ [, a0 A# e
# V) r+ C$ [2 Y, @
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

SCMLife推荐上一条 /5 下一条

QQ|小黑屋|手机版|无图版|SCMLife.com ( 京ICP备06056490号-1 )

GMT+8, 2020-2-21 05:32 , Processed in 0.065169 second(s), 6 queries , Gzip On, MemCache On.

Powered by SCMLife X3.4 Licensed

© 2001-2017 JoyShare.

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