2016-05-30 7 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

:mm:ssの形式を? – rici

+0

はい、出力をhh:mm:ssで出力します。 – user3834663

+0

好奇心の喪失から、awkはどのように推測すると思いますか? mktimeの結果は単なる数値です。 – rici

答えて

2

感謝を示すべきであるあなたは、秒数を印刷したい場合HH:MM:SS構文では、計算を自分で行う必要があります。 printfを使用すると、たとえば4:2:30ではなく4:02:30のように印刷したい場合に便利です。例えば、あなたはそれがHHの違い印刷する

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