Calculate Time diff in milli milliseconds(Time format : HH:MM:SS,NNN)


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Calculate Time diff in milli milliseconds(Time format : HH:MM:SS,NNN)
# 1  
Calculate Time diff in milli milliseconds(Time format : HH:MM:SS,NNN)

Hi All,

I have one file which contains time for request and response.

I want to calculate time difference in milliseconds for each line.

This file can contain 10K lines.

Sample file with 4 lines.

for first line.

Code:
Request Time: 15:23:45,255
Response Time: 15:23:45,258

Time diff is 3 milliseconds.

I want to print this in last of every line.

Like this

Code:
15:23:45,255 WARN <NTS>  RouteRequest : 518318 ### 15:23:45,258 CRIT <ISUP> RouteResponse : 518318 ||3

Code:
15:23:45,255 WARN <NTS>  RouteRequest : 518318 ### 15:23:45,258 CRIT <ISUP> RouteResponse : 518318
15:23:45,274 WARN <NTS>  RouteRequest : 518319 ### 15:23:45,278 CRIT <ISUP> RouteResponse : 518319
15:23:45,284 WARN <NTS>  RouteRequest : 518320 ### 15:23:45,286 CRIT <ISUP> RouteResponse : 518320
15:23:45,294 WARN <NTS>  RouteRequest : 518321 ### 15:23:45,296 CRIT <ISUP> RouteResponse : 518321

Thanks,
Raza

---------- Post updated at 05:00 PM ---------- Previous update was at 04:45 PM ----------

Hi All,

You can consider it like this also.

I have 3 fields in every line.

I want time difference in milli seconds as 4th column. It should be extracted from difference between column 2nd and 1st.

Original File.


Code:
15:23:45,212 15:23:45,215 518316
15:23:45,253 15:23:45,255 518317
15:23:45,255 15:23:45,258 518318
15:23:45,274 15:23:45,278 518319
15:23:45,284 15:23:45,286 518320
15:23:45,294 15:23:45,296 518321


Output

Code:
15:23:45,212 15:23:45,215 518316 # 3
15:23:45,253 15:23:45,255 518317 # 2
15:23:45,255 15:23:45,258 518318 # 3
15:23:45,274 15:23:45,278 518319 # 4
15:23:45,284 15:23:45,286 518320 # 2
15:23:45,294 15:23:45,296 518321 # 2


Present file has time diff at mili second level only, but in original file there can be difference at minute/second level also.

Regards,
Raza Ali

Last edited by RudiC; 03-05-2018 at 08:29 AM.. Reason: Changed ICODE to CODE tags.
# 2  
How about
Code:
awk 'function MS(TS) {n=split (TS,TMP, "[:,]"); return ((TMP[1]*60+TMP[2])*60+TMP[3])*1000+TMP[4]} {print $0 "||" MS($8) - MS($1)}' file
15:23:45,255 WARN <NTS>  RouteRequest : 518318 ### 15:23:45,258 CRIT <ISUP> RouteResponse : 518318||3
15:23:45,274 WARN <NTS>  RouteRequest : 518319 ### 15:23:45,278 CRIT <ISUP> RouteResponse : 518319||4
15:23:45,284 WARN <NTS>  RouteRequest : 518320 ### 15:23:45,286 CRIT <ISUP> RouteResponse : 518320||2
15:23:45,294 WARN <NTS>  RouteRequest : 518321 ### 15:23:45,296 CRIT <ISUP> RouteResponse : 518321||2

EDIT: This doesn't work crossing midnight, though.
This User Gave Thanks to RudiC For This Post:
# 3  
Hi Rudi,

Thank you for quick response.

Date in the log file is constant, So it won't be an issue.

Regards,
Raza Ali
# 4  
Code:
$ cat time
15:23:45,255 WARN <NTS>  RouteRequest : 518318 ### 15:23:45,258 CRIT <ISUP> RouteResponse : 518318

Must set local decimal character / delimiter to be ',' and thousand delimiter to be '.'

Code:
$ awk -N 'BEGIN {FPAT="[0-9]+,[0-9]+ "} {print $0 " || "((($2-$1)*1000))}' time

otherwise
Code:
$ awk 'BEGIN {FPAT="[0-9]+,[0-9]+ "} {a=$1;b=$2;sub(/,/,".",a);sub(/,/,".",b); print $0 " || "(((b-a)*1000))}' time


Last edited by abdulbadii; 03-05-2018 at 09:50 PM..
# 5  
Quote:
Originally Posted by abdulbadii
Code:
$ cat time
15:23:45,255 WARN <NTS>  RouteRequest : 518318 ### 15:23:45,258 CRIT <ISUP> RouteResponse : 518318

Must set local decimal character / delimiter to be ',' and thousand delimiter to be '.'

Code:
$ awk -N 'BEGIN {FPAT="[0-9]+,[0-9]+ "} {print $0 " || "((($2-$1)*1000))}' time

otherwise
Code:
$ awk 'BEGIN {FPAT="[0-9]+,[0-9]+ "} {a=$1;b=$2;sub(/,/,".",a);sub(/,/,".",b); print $0 " || "(((b-a)*1000))}' time

Hi abdulbadii,
When I try your code with your sample input, your first suggestion produces the output:
Code:
awk: unknown option -N ignored

15:23:45,255 WARN <NTS>  RouteRequest : 518318 ### 15:23:45,258 CRIT <ISUP> RouteResponse : 518318 || -15000

and your second suggestion produces the output:
Code:
15:23:45,255 WARN <NTS>  RouteRequest : 518318 ### 15:23:45,258 CRIT <ISUP> RouteResponse : 518318 || -15000

which is exactly what I would expect when subtracting a string starting with 15: from the string WARN and multiplying the result by 1000.

If you had used $8 and $1 (instead of $2 and $1) with an awk that conforms to the standards, your results would have been 1000 times the difference between the hours portions of the two timestamps. What system are you using where the above code produces the output requested by the person who started this thread?
# 6  
GNU awk replacement,
Code:
$ awk --version
GNU Awk 4.2.0, API: 2.0 (GNU MPFR 4.0.1, GNU MP 6.1.0)
Copyright (C) 1989, 1991-2017 Free Software Foundation.

# 7  
Quote:
Originally Posted by abdulbadii
GNU awk replacement,
Code:
$ awk --version
GNU Awk 4.2.0, API: 2.0 (GNU MPFR 4.0.1, GNU MP 6.1.0)
Copyright (C) 1989, 1991-2017 Free Software Foundation.

Wow! I'm impressed. I would never have guessed that GNU awk ignored the standards so much that the code:
Code:
awk 'BEGIN{print ("WARN" - "15:23:45.255") * 1000}'

would produce the output:
Code:
3

(as requested by Razu Ali) instead of the output:
Code:
-15000

that would be produced by a version of awk that conforms to the standards.

Why do I find it hard to believe that your version of awk actually produces that output? Smilie
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #91
Difficulty: Easy
To change to another directory in Linux, you use the cd command.
True or False?

10 More Discussions You Might Find Interesting

1. Solaris

Process execution time in milliseconds

Hey everyone, I'm coming from Linux where the top command gave me lots of process info (particularly CPU time in milliseconds) and I'm trying to find similar info in Solaris. So far I've looked at prstat and ps but neither give cpu time in milliseconds, both seem to have 1 second... (2 Replies)
Discussion started by: maniac_ie
2 Replies

2. Shell Programming and Scripting

calculate time from a given format

Hi i have a file which consists of the time records in following format H:MM:SS.sss 0:00:09.249 0:00:00.102 0:00:00.105 0:00:08.499 0:00:08.499 0:00:06.980 0:00:04.249 0:00:05.749 0:00:00.108 0:00:00.107 0:00:03.014 0:00:00.000 I need to calculate their equivalent milliseconds... (3 Replies)
Discussion started by: vaibhavkorde
3 Replies

3. Shell Programming and Scripting

Calculate age of a file | calculate time difference

Hello, I'm trying to create a shell script (#!/bin/sh) which should tell me the age of a file in minutes... I have a process, which delivers me all 15 minutes a new file and I want to have a monitoring script, which sends me an email, if the present file is older than 20 minutes. To do... (10 Replies)
Discussion started by: worm
10 Replies

4. Shell Programming and Scripting

How to calculate time difference between start and end time of a process!

Hello All, I have a problem calculating the time difference between start and end timings...! the timings are given by 24hr format.. Start Date : 08/05/10 12:55 End Date : 08/09/10 06:50 above values are in mm/dd/yy hh:mm format. Now the thing is, 7th(08/07/10) and... (16 Replies)
Discussion started by: smarty86
16 Replies

5. Shell Programming and Scripting

Getting Time in MilliSeconds with Perl

I use something like this in perl to get the date and time: use Time::localtime; use Time::gmtime; $tm = gmtime; $time_str = sprintf "%04d-%02d-%02d %02d:%02d:%02d", $tm->year + 1900, $tm->mon + 1, $tm->mday, $tm->hour, $tm->min, $tm->sec; It gives me something like this: 2010-08-26... (1 Reply)
Discussion started by: lforum
1 Replies

6. Shell Programming and Scripting

Convert Epoch time format to normal date time format in the same file

I have a file named "suspected" with series of line like these : {'protocol': 17, 'service': 'BitTorrent KRPC', 'server': '219.78.120.166', 'client_port': 52044, 'client': '10.64.68.44', 'server_port': 8291, 'time': 1226506312L, 'serverhostname': ''} {'protocol': 17, 'service': 'BitTorrent... (3 Replies)
Discussion started by: rk4k
3 Replies

7. Shell Programming and Scripting

time diff help

Input file: Tue Oct 21 12:56:35 2008 Started Tue Oct 21 12:56:39 2008 Completed Tue Oct 21 12:57:25 2008 Started Tue Oct 21 12:57:32 2008 Completed Tue Oct 21 12:58:12 2008 Started Tue Oct 21 12:58:50 2008 Completed Output required: Tue Oct 21 12:56:35 2008 Started Tue Oct 21... (2 Replies)
Discussion started by: uwork72
2 Replies

8. Shell Programming and Scripting

Convert milliseconds to standard time

hello, I have the uptime of the server showing as upTime=2427742050 How do I convert it to standard time. Thanks Chiru (1 Reply)
Discussion started by: chiru_h
1 Replies

9. Programming

C time in milliseconds function.

I need a c function which return the time in: hour min sec and mil sec I am writing on unix os. (3 Replies)
Discussion started by: kamil
3 Replies

10. UNIX for Dummies Questions & Answers

useing date or other time style utility to get milliseconds.

hello everyone. im sure someone has run into the problem of timestamping files and end up haveing 2 files with the same name thus over writeing one of them. In my application i am trying to get a timestamp w/ milliseconds but i am haveing no luck and finding an answer in the man pages. I know... (3 Replies)
Discussion started by: Optimus_P
3 Replies

Featured Tech Videos