1

私は現在、いくつかの異なるファイルを処理して結合するスクリプトに取り組んでいます。一部では、誰かが作業した「合計」時間を決定するために、2つの異なる時間の違いを見つける必要があります。時間自体は次の形式です

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

最初の時間は開始時間、2番目の終了時間、3番目の合計時間です。これは正しく表示されますが、再確認して修正する必要のあるエントリがいくつかあります(開始/終了時間に基づいて合計時間が正しくありません)。私は他の投稿でいくつかの異なる解決策を見つけましたが、それらのほとんどには日付なども含まれています(それらのほとんどはawkを使用しています)、私はawkの経験がないので、それらの例から日付部分を削除する方法がわかりません。また、時間をUNIXエポック時間に変換できると聞きましたが、これを実現する他の方法があるかどうかだけ知りたいと思いました。ありがとうございます。

4

1 に答える 1

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)

注: 時間が有効な形式であるかどうかを確認するものは何もありません。データの信頼性はわかりません。

于 2012-11-24T19:22:22.933 に答える