2016-05-30 92 views
3

我有以下input.txt文件。我需要計算$ 2和$ 3的時差並以小時計算打印差異。使用awk計算時差

P1,  2016-05-30 00:11:20, 2016-05-30 04:36:40 
P2,  2016-05-30 00:07:20, 2016-05-30 04:32:31 

我有以下代碼,但它看起來像小時不顯示準確。請幫忙。

awk -F, '{gsub(/[-:]/," ",$2);gsub(/[-:]/," ",$3); 
      d2=mktime($3);d1=mktime($2); 
      print $1","(d2-d1)/3600,"hrs";}' input.txt 

我得到這樣的輸出。

P1,4.42222 hrs 
P2,4.41972 hrs 

但它應該呈現出差異的 4時25分20秒小時 4時25分11秒小時

在此先感謝

+0

你希望它打印HH的區別:mm:ss格式? – rici

+0

是的,我想輸出不打印在hh:mm:ss – user3834663

+0

出於好奇,你是如何期待awk猜測的? mktime的結果只是一個數字。 – rici

回答

2

如果你想打印的秒數HH:MM:SS語法,你需要自己做計算。使用printf將證明有用,如果你想打印,例如,4:02:30而不是4:2:30。例如,

secs = d2 - d1; 
printf "%s, %d:%02d:%02d hrs.\n", $1, int(secs/3600), int(secs/60)%60, secs%60 
1
$ cat tst.awk 
BEGIN { FS=",[[:space:]]+"; OFS="," } 
function dt2secs(dt) { return mktime(gensub(/[-:]/," ","g",dt)) } 
function secs2hms(s) { return sprintf("%d:%02d:%02d hrs",s/(60*60),(s/60)%60,s%60) } 
{ print $1, secs2hms(dt2secs($3)-dt2secs($2)) } 

$ awk -f tst.awk file 
P1,4:25:20 hrs 
P2,4:25:11 hrs