If your version of nawk supports mktime() then this is the simple case:
Code:
awk '
/Entering/ { startt[$6, $(NF-2)] = $1 " " $2; next; }
/Exiting/ {
tn = $(NF-2);
edt = $1 " " $2; # bang together start/end time into "yyyy mm dd hh mm ss"
sdt = startt[$6, tn];
gsub( "[-:]", " ", sdt );
gsub( "[-:]", " ", edt );
gsub( ",", ".", edt ); # dont know if mktime handles fractions, so dropping them
gsub( ",", ".", sdt );
printf( "TN %s start: %s end: %s %s diff: %.2f min\n", tn, startt[$6, tn], $1, $2, (mktime( edt ) - mktime( sdt ))/60 ); }
' input-file >output-file
If mktime() isn't supported (likely won't be), then coding a function to convert a date stamp to seconds past epoch isn't difficult. The function assumes that the date has been adjusted to convert local time to zulu, but for subtracting dates from the same log this shouldn't be necessary.
Code:
awk '
BEGIN {
epoch_yr = 1970;
soup = "000031059090120151181212243273304334"; # sum of days in months prior to indexed month
}
# dt is yyyymmddhhmmss
# returns seconds past epoch (unix time stamp)
function time2spe( date, time, dt, tm, y, m, d, yep, dep, ld, ldep, ssm ) # assumes time is adjusted to zulu, but for this it doesnt matter
{
split( date, dt, "-" );
split( time, tm, ":" );
tm[3] = tm[3] + 0; # drop fraction
y = dt[1]; # unnecessary, but easier to read
m = dt[2];
d = (dt[3] + substr( soup, (m*3)-2, 3 ))-1; # sum of days before the day indicated in dt
ssm = (tm[1] * 3600) + (tm[2] * 60) + tm[3]; # seconds since midnight for given date/time
yep = y - epoch_yr; # years since epoch, before date year
dep = yep * 365; # normal days since epoch, but before date year
ldep = int((yep-1)/4); # leap days since epoch, not including date year
if( (ld = m > 2 ? ( y % 4 == 0 ? 1 : 0) : 0) ) # possible leap day this year? count only if we are march or beyond
if( (y % 100 == 0) && (y % 400) ) # century years must also be divisible by 400 to be a leap year
ld = 0; # if it is not, then reset ld count
return ((dep + ldep + ld + d) * 86400) + ssm;
}
/Entering/ {
startd[$6, $(NF-2)] = $1;
startt[$6, $(NF-2)] = $2;
next;
}
/Exiting/ {
tn = $(NF-2);
st = startt[$6, tn]; # easier to read
sd = startd[$6, tn]
printf( "TN %s start: %s %s end: %s %s diff: %.2f min\n", tn, sd, st, $1, $2, (time2spe( $1, $2 ) - time2spe( sd, st ))/60 );
}
' input-file >output-file
This could likely be optimised a bit, but I'm tired and it should work.
You can adjust the printf() statement to output exactly what you need. Right now it should produce the same as before with the difference between start and end times in minutes.
Hope this helps.
---------- Post updated at 23:51 ---------- Previous update was at 23:45 ----------
Not sure what identifies the API, but assuming it's something like getRackInfo, then you could do it this way:
Hi experts,
I am reading two log files and passing dates as output to a txt file.
Code is given below:
echo "Start Time:" >> Report.txt
cat start.log | while read LINE1
do
echo $DATE1 >> Report.txt
done
echo "End Time:" >> Report.txt
cat end.log | while read LINE2
... (7 Replies)
Hi, I'm a newbie to unix. I have a txt file with my data, a list of events. Each event comes with a unix time. I want to seperate a months worth of events into those that occur during the day, and those at night. I have no clue how to go about this, please can someone push me in the right... (6 Replies)
i would need some help in setting the value of a variable (TIME_NOW) depending on the time of the day ...e.g.
if today's date is 12th April 2009 and if the current time is between midnight and 16:59:59 hrs then the TIME_NOW should be yesterday's date i.e. TIME_NOW=11
else if the current time... (3 Replies)
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)
Hello!
I need to calculate number of days between two dates.
The first date is in format of string.
The second one is in format of date (current date):
#!/usr/bin/ksh
export ORACLE_HOME=/software/oracle/PROD10gR2
cd /etc/ORACLE/WALLETS/oracle
export EXP_DATE=`. $ORACLE_HOME/bin/orapki cert... (1 Reply)
I have a question i need clarification. We had a problem on a p520 system and had to pull the battery on the service processor card. That did the trick and system booted. We forgot to set the time in the service processor before booting. Once AIX was booted we changed the date and time there. ... (1 Reply)
Hi Friends,
I have 2 varaibles which contain
START=`date '+ %m/%d/%y %H:%M:%S'`
END=`date '+ %m/%d/%y %H:%M:%S'`
i want the time difference between the two variables in Seconds.
Plz help. (2 Replies)
Need assistance . Below code gives me the date but I wanted output as day of the week (wday) .
Code:
use Time::Local;
my $time=timelocal(1,2,3,9,11,2013);
$theTime = localtime($time);
print "$theTime\n";
Result:
Mon Dec 9 03:02:01 2013
Wanted output as only Mon (2 Replies)