Linux

以時間格式 hh:mm:ss 計算兩列之間的時間差

  • May 7, 2019

我想要第 5 列和第 4 列之間的時間差

我的輸入:

DATE       TIMESTAMP  ID   START TIME END TIME
2019-04-05 13:57:19   1607 13:06:42   13:07:12
2019-04-05 13:58:00   2327 13:57:26   13:57:43

輸出要求:

DATE       TIMESTAMP  ID   START TIME END TIME  TIME DIFFERENCE
2019-04-05 13:57:19   1607 13:06:42   13:07:12  00:00:30
2019-04-05 13:58:00   2327 13:57:26   13:57:43  00:00:17

使用的程式碼:

awk '
function convert(t) {

   split(t,Arr,":")
   return Arr[1]*3600+Arr[2]*60+Arr[3]

}
/^#/ {print $0,"\ttotal(sec)"; next}
{print $0,"\t",convert($5)-convert($4) }'

程式碼輸出:

DATE       TIMESTAMP  ID    START TIME END TIME    TIME DIFFERENCE
2019-04-05 13:57:19   1607  13:06:42   13:07:12       30
2019-04-05 13:58:00   2327  13:57:26   13:57:43       17

上面給定命令的輸出以秒為單位,我需要 HH:MM:SS 中的輸出。

awk '
function convert(t) {

   split(t,Arr,":")
   return Arr[1]*3600+Arr[2]*60+Arr[3]

}
function HMS(sec){
hr=int(sec/3600)
min=int(sec/60-hr*60)
sec=sec-(hr*3600+min*60)

return sprintf("%02d:%02d:%02d",hr,min,sec)
}
/^#/ {print $0,"\ttotal(sec)"; next}
{print $0,"\t",HMS(convert($5)-convert($4)) }'

引用自:https://unix.stackexchange.com/questions/517540