2012-11-24 25 views
1

我目前正在處理和組合幾個不同文件的腳本,對於一部分,我需要找到兩個不同時間之間的差異爲了確定某人工作的「總時間」。時間本身的格式如下我應該如何在bash環境中減去兩個不同的時間

34:18:00,40:26:00,06:08:00 

第一個是開始時間,第二個結束時間,第三個總時間。雖然這個顯示正確,但還是有一些條目需要重新檢查並更正(根據開始/結束時間,總時間不正確)。我在其他帖子中發現了幾種不同的解決方案,但其中大多數還包括日期等(其中大多數使用awk),但我對awk沒有經驗,所以我不知道如何去除這些示例中的日期部分。我也聽說我可以將時間轉換爲unix時代,但我只是好奇,是否還有其他方法可以實現這一點,謝謝!

回答

7

像這樣的東西可以幫助你:

#!/bin/bash 

time2seconds() { 
    a=(${1//:/ }) 
    echo $((${a[0]}*3600+${a[1]}*60+${a[2]})) 
} 
seconds2time() { 
    printf "%.2d:%.2d:%.2d" $(($1/3600)) $((($1/60)%60)) $(($1%60)) 
} 

IFS=, read start stop difference <<< "34:18:00,40:26:00,06:08:00" 

printf "Start=%s\n" "$start" 
printf "Stop=%s\n" "$stop" 
printf "Difference=%s (given in file: %s)\n" $(seconds2time $(($(time2seconds $stop)-$(time2seconds $start)))) "$difference" 

輸出是:

Start=34:18:00 
Stop=40:26:00 
Difference=06:08:00 (given in file: 06:08:00) 

注:沒有什麼,它檢查的時間是有效的格式,我不知道如何可靠你的數據是。

+0

正是我在找的,謝謝! – lacrosse1991