time diffrence between two lines in a log file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting time diffrence between two lines in a log file
# 15  
Old 04-29-2009
Quote:
Originally Posted by ghostdog74
as i mentioned, you can't just use expr to subtract 2 dates/time like that. what if the end time is 1 hour later, eg Sun Apr 26 03:11:03.224. how are you going to calculate that?
Hi ghostdog,

Its a great point, never thought about that. I didn't thought of new logic, just trying to modify the logic what NT has posted, as my day was ending!!!
Will correct my thinking and apologies for my post.

Thank you!!!
# 16  
Old 04-29-2009
Quote:
Originally Posted by radoulov
A few questions.

Do you really need such a high time resolution? Would up to the second be fine as well?

Could you install/use external Perl modules (like Date::Manip for instance)?

What platform you are using?

What version of ksh?
Hi Radoulov,

Yes the high time resolution is very much needed. In the log files there are plenty of lines where there is diffrence in only miliiseconds and upto seconds field the diffrence of time is same,so most of the time the diffrence will be zero not as expected.
I am ruuning the script is Linux plateform.

The ksh verios is --

Code:
echo $KSH_VERSION
@(#)PD KSH v5.2.14 99/07/13.2

Is there any alternate way without installing the extra module in perl.
I appericiate your response.

Thanks
NT
# 17  
Old 04-29-2009
Try to implement this

Code:
        start_time=`echo $var1 | cut -d " " -f4` | sed 's/[:.]//g'
           end_time=`echo $var2 | cut -d " " -f4`| sed 's/[:.]//g'
           h1=`echo $start_time | cut -c1-2`	
    	   m1=`echo $start_time | cut -c3-4`	
           s1=`echo $start_time | cut -c5-6`	
           mm1=`echo $start_time | cut -c7-9`

           h2=`echo $end_time | cut -c1-2`	
           m2=`echo $end_time | cut -c3-4`	
           s2=`echo $end_time | cut -c5-6`
           mm2=`echo $end_time | cut -c7-9`	
    
          mm3=`expr $mm2 - $mm1`
          if [ $mm3 -lt 0 ]		
          then
	  mm3=`expr $mm3 + 1000`	
	  s1=`expr $s1 + 1`		
          fi
          s3=`expr $s2 - $s1`
          if [ $s3 -lt 0 ]		
          then
	  s3=`expr $s3 + 60`	
	  m1=`expr $m1 + 1`	
          fi

         m3=`expr $m2 - $m1`		
         if [ $m3 -lt 0 ]		
         then
	 m3=`expr $m3 + 60`	
	h1=`expr $h1 + 1`	
        fi
        h3=`expr $h2 - $h1`		
        if [ $h3 -lt 0 ]	
        then
	h3=`expr $h3 + 24`	
        fi
    for number in $h3 $m3 $s3 $mm3	
    do
	if [ $number -lt 10 ]	
	then
	    echo "0$number\c" 
	else
	    echo "$number\c"  
	fi

cheers,
Devaraj Takhellambam
# 18  
Old 04-29-2009
It would be most efficient (easy, fast) to convert time strings to epoch for calculating I think.
# 19  
Old 04-29-2009
Quote:
Originally Posted by unSpawn
It would be most efficient (easy, fast) to convert time strings to epoch for calculating I think.
Can you suggest me how i can achieve that.

Thanks
NT
# 20  
Old 04-29-2009
You may try something like this but you need to install the DateTime module:

Code:
#!/usr/bin/env perl

use strict;
use warnings;
use DateTime;

my $logfile = shift || die "usage: $0 <filename>\n";

my %mon2num = qw(
  Jan 1  Feb 2  Mar 3  Apr 4  May 5  Jun 6
  Jul 7  Aug 8  Sep 9  Oct 10 Nov 11 Dec 12
);

my ( $start_dt, $end_dt );

open LF, $logfile or die "$logfile: $!\n";

while (<LF>) {

    if (/(?:Entering|Exiting) ARRF_LIB_Evaluate/) {
        $end_dt = '';
        my @dtA = split;
        my @time = split /[:.]/, $dtA[3];
        ( /Exiting/ ? $end_dt : $start_dt ) = DateTime->new(
            year       => $dtA[4],
            month      => $mon2num{ $dtA[1] },
            day        => $dtA[2],
            hour       => $time[0],
            minute     => $time[1],
            second     => $time[2],
            nanosecond => $time[3],
        );

        if ($end_dt) {
            print "start: ", $start_dt, "\n";
            print "end: ",   $end_dt,   "\n";
            my $e = $end_dt->subtract_datetime($start_dt);
            printf
"elapsed: %s year(s), %s month(s), %s week(s), %s day(s), %s hour(s), %s min, %s sec, %s ms\n",
              $e->years, $e->months, $e->weeks, $e->days, $e->hours,
              $e->minutes, $e->seconds, $e->nanoseconds;

        }
    }
}


Last edited by radoulov; 04-29-2009 at 09:22 AM..
# 21  
Old 04-29-2009
Hi Rado,

Thank You.
When i ran the script like this it gave me error--

Code:
C:\Perl Script>perl timediff.pl logfile
Use of uninitialized value in print at timediff.pl line 35, <LF> line 17.
start:
end: 2009-04-26T04:06:05
Can't call method "time_zone" on an undefined value at C:/Perl/lib/DateTime.pm l
ine 1231, <LF> line 17.

I put the DateTime module files in Perl Librray.
logfile is also in the directory where i am running the program.

Thanks
NT
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Collecting all lines between two time stamp from the log

Can you help me to collect the entire logs between two time stamp. The below awk command collecting the logs only if the line has time stamp. awk '$0>=from && $0<=to' from="150318 23:19:04" to="150318 23:55:04" log file 150318 23:19:04 logentries 150318 23:29:04 logentries 150318... (11 Replies)
Discussion started by: zenkarthi
11 Replies

2. Shell Programming and Scripting

Check/Parse log file's lines using time difference/timestamp

I was looking at this script which outputs the two lines which differs less than one sec. #!/usr/bin/perl -w use strict; use warnings; use Time::Local; use constant SEC_MILIC => 1000; my $file='infile'; ## Open for reading argument file. open my $fh, "<", $file or die "Cannot... (1 Reply)
Discussion started by: cele_82
1 Replies

3. Shell Programming and Scripting

Read multiple lines at a time from file

Hello All, I have a file like below.... dn: cn=user1,ou=org,o=org cn=user1 uid=user1 cn=user2,ou=org,o=org cn=user2 uid=user2 cn=user3,ou=org,o=org cn=user3 cn=user33 uid=user3 cn=user4,ou=org,o=org cn=user4 uid=user4 (6 Replies)
Discussion started by: s_linux
6 Replies

4. Shell Programming and Scripting

Read two lines at time from a file

Hello community, what I need to do is read 2 rows at time from a file. I have this simple solution: File to read: LINE1 LINE2 LINE3 LINE4 LINE5 LINE6 LINE7 LINE8Read routine:#!/bin/ksh sed '1,3d' /out.txt | while read line; do read line2 echo $line $line2 doneResult:LINE1... (5 Replies)
Discussion started by: Lord Spectre
5 Replies

5. Shell Programming and Scripting

Find time difference between two consecutive lines in same file.

Hello I have a file in following format: IV 08:09:07 NM 08:12:01 IC 08:12:00 MN 08:14:20 NM 08:14:15 I need a script to compare time on each line with previous line and show the inconsecutive line. Ex.: 08:12:00 08:14:15 A better way... (6 Replies)
Discussion started by: vilibit
6 Replies

6. Shell Programming and Scripting

Get all lines in a file after particular time

Hi All, I am lookig for a way to get all the lines from a log file which has been updated 5 mins prior to the system time. The log file will be like below: 09:01:00 Started polling 09:01:05 Checking directory test 09:02:00 Error! Cannot access directory test 09:03:00 Polling I get... (8 Replies)
Discussion started by: deepakgang
8 Replies

7. Shell Programming and Scripting

Extracting lines in file based on time

Hi, anyone has any ideas on how do we extract lines from a file with format similiar to this: (based on current time) Jun 18 00:16:50 .......... ............. ............ Jun 18 00:17:59 .......... ............. ............ Jun 18 01:17:20 .......... ............. ............ Jun 18... (5 Replies)
Discussion started by: faelric
5 Replies

8. Shell Programming and Scripting

To find the time difference between two lines of the same log file

Hello Friends, I want to write a script for the following: nlscux62:tibprod> grep "2008 Apr 30 01:" SA_EHV_SPEED_SFC_IN_03-SA_EHV_SPEED_SFC_IN_03-2.log | grep -i post | more 2008 Apr 30 01:01:23:928 GMT +2 SAPAdapter.SA_EHV_SPEED_SFC_IN_03-SA_EHV_SPEED_SFC_IN_03-2 Info AER3-000095 IDOC... (2 Replies)
Discussion started by: satyakam
2 Replies

9. Shell Programming and Scripting

Processing a log file based on date/time input and the date/time on the log file

Hi, I'm trying to accomplish the following and would like some suggestions or possible bash script examples that may work I have a directory that has a list of log files that's periodically dumped from a script that is crontab that are rotated 4 generations. There will be a time stamp that is... (4 Replies)
Discussion started by: primp
4 Replies

10. UNIX for Dummies Questions & Answers

Can any how we can find the time diffrence...?

Hi, I am trying to caluate the time elasped by the job to run.For that i have used the following command: I have one file which contains the following more start.txt 991 STARTED Fri Aug 10 14:04:20 2007 Starting Job JOB_NAME. (...) 1036 STARTED Fri Aug 10 14:04:31 2007 ... (1 Reply)
Discussion started by: Amey Joshi
1 Replies
Login or Register to Ask a Question