2011-12-23 13 views
2

これはあまりにも基本的な場合、私の謝罪します。私は実際に仕事をする人を探しているのではなく、むしろ正しい方向に私を向ける。私はパフォーマンスが遅いときにパターンを探すために何かが取られているかを判断するために情報を引き出すためにログファイルを数年前に戻しています。私は各行を読むことができますが、前の行を読むことはできません。次のように ログファイルの2行の間の時間の差

ログファイル

は以下のとおりです。

~ 
Other Stuff 
~ 
12/21/11 18:58:15 Inserting data into ST_ITEMS 
ST_ITEMS Row: 10000 inserted at 12/21/11 19:40:06 
ST_ITEMS Row: 20000 inserted at 12/21/11 20:05:58 
ST_ITEMS Row: 30000 inserted at 12/21/11 20:37:03 
ST_ITEMS Row: 40000 inserted at 12/21/11 20:59:25 
ST_ITEMS Row: 50000 inserted at 12/21/11 21:17:43 
ST_ITEMS Row: 60000 inserted at 12/21/11 21:54:47 
12/21/11 21:59:24 Finished inserting data into Staging Tables 

~ 
Other Stuff 
~ 

12/21/11 22:04:43 Inserting data into ST_ITEMS 
ST_ITEMS Row: 10000 inserted at 12/21/11 22:38:53 
ST_ITEMS Row: 20000 inserted at 12/21/11 23:06:33 
ST_ITEMS Row: 30000 inserted at 12/21/11 23:33:03 
ST_ITEMS Row: 40000 inserted at 12/22/11 00:05:38 
ST_ITEMS Row: 50000 inserted at 12/22/11 00:45:59 
ST_ITEMS Row: 60000 inserted at 12/22/11 01:12:42 
ST_ITEMS Row: 70000 inserted at 12/22/11 01:40:02 
ST_ITEMS Row: 80000 inserted at 12/22/11 02:14:23 
ST_ITEMS Row: 90000 inserted at 12/22/11 03:04:15 
ST_ITEMS Row: 100000 inserted at 12/22/11 03:47:13 
ST_ITEMS Row: 110000 inserted at 12/22/11 04:36:21 
ST_ITEMS Row: 120000 inserted at 12/22/11 05:44:47 
ST_ITEMS Row: 130000 inserted at 12/22/11 06:28:24 
ST_ITEMS Row: 140000 inserted at 12/22/11 07:10:55 
ST_ITEMS Row: 150000 inserted at 12/22/11 07:35:16 
12/22/11 07:40:28 Finished inserting data into Staging Tables 

~ 
Other Stuff 
~ 

は基本的に、私はそれ以上のものからラインの日付/時刻を減算することにより、各10000行が取るどのくらいの時間を計算します。私はオプションとしてPerlとBashの両方を見ていますが、Perlはもっと可能性があります。

PERL #!は/ usr/binに/ perlの

use strict; 
use warnings; 

use Date::Parse; 
use Date::Format; 

my $start = "2007-11-17 12:50:22"; 
my $stop = "2007-11-17 12:53:22"; 
my $diff = str2time($stop) - str2time($start); 

#printf "diff between %s and %s is %d seconds\n", $start, $stop, $diff; 

open(LOG,"info_refresh_tvl.log.122111_185800") or die "Unable to open logfile:$!\n"; 
while(my $line = <LOG>){ 


     if ($line=~/inserted\b/) 

     { 
     #Pseudocode 
      #Parse time from Pervious Line 
      #Parse time from Current Line 
      #Calculate Difference of Time 
        #my $diff = str2time($stop) - str2time($start); 
      #printf "diff between %s and %s is %d seconds\n", $start, $stop,  $diff; ') 

      printf $line ; 


     } 

} 
close(LOG); 

BASH

grep 'ST_ITEMS Row:' logfile122111.log | while read line 
    do 
     event=$(echo "$line" | awk '{print $6 " " $7}') 

     case $event in 
      "10000") 
       ;; 
      *) 
       past=$(echo "$line" | awk '{print $6 " " $7}') 
       current=$(echo "$line" | awk '{print $6 " " $7}' 
       echo $past 
       echo $current) 
       ;; 
     esac 



echo $event 


    done 
+0

。 ながら、(私の$行= ){ 場合($行=〜/挿入\ bの/) { プッシュ(@times、$ライン); } "@times"を印刷します。 } 閉じる(LOG); – user739866

答えて

3

あなたが比較した後に継続するときだけ各行を保存します。完了後、現在の行で上書きします。擬似コードで

$CurrentLine = $line; 
#Parse time from $CurrentLine 
#Parse time from $LastLine 
#Calculate difference of time 
$LastLine = $line; 
0
grep -B1 gets the previous line before the line that is currently matched 
0

あなたは時間を保持するための2つの変数を定義することができます。与える擬似コードで:

my $old = undef; 
my $current; 

while (my $line = <LOG>) { 
    $line =~ /inserted at (.*)/ or next; 
    $current = parse_time($1); 
    if (defined $old) { 
     printf("Time to insert 10k rows: %d\n", datediff($current, $old)); 
    } 
    $old = $current; 
} 

parse_time()datediff()のためのギャップを埋め、あなたが設定する必要があります)

2

を他の人がすでに述べたように、単に参照のために、前の時間を保ちます。ここではPerl 5.10ので、コアモジュールであるTime::Pieceを使用して簡単な例である:

use Time::Piece; 

my $lasttime; 
while(<DATA>) { 
    chomp; 

    my $diff; 
    if(m{(\d+/\d+/\d+ \d+:\d+:\d+)}) { 
     my $t = Time::Piece->strptime($1, "%D %H:%M:%S"); 
     if(defined $lasttime) { 
      $diff = $t - $lasttime; 
     } 
     $lasttime = $t; 
    } 
    undef $lasttime if m{Finished inserting data}; 

    print "$_\t", ($diff && $diff->pretty) , "\n"; 
} 

__DATA__ 
~ 
Other Stuff 
~ 
12/21/11 18:58:15 Inserting data into ST_ITEMS 
ST_ITEMS Row: 10000 inserted at 12/21/11 19:40:06 
ST_ITEMS Row: 20000 inserted at 12/21/11 20:05:58 
ST_ITEMS Row: 30000 inserted at 12/21/11 20:37:03 
ST_ITEMS Row: 40000 inserted at 12/21/11 20:59:25 
... 

I回のアレイに情報を入れて検討した後、アレイからの時間を解析し、引いていプリント

~ 
Other Stuff 
~ 
12/21/11 18:58:15 Inserting data into ST_ITEMS 
ST_ITEMS Row: 10000 inserted at 12/21/11 19:40:06 41 minutes, 51 seconds 
ST_ITEMS Row: 20000 inserted at 12/21/11 20:05:58 25 minutes, 52 seconds 
ST_ITEMS Row: 30000 inserted at 12/21/11 20:37:03 31 minutes, 5 seconds 
ST_ITEMS Row: 40000 inserted at 12/21/11 20:59:25 22 minutes, 22 seconds