/ / jak mam odjąć dwa różne czasy w środowisku basha - bash, matematyka, czas

jak mam odjąć dwa różne czasy w środowisku bash - bash, matematyka, czas

Obecnie pracuję nad skryptem, który przetwarzai łączy kilka różnych plików, z jednej strony konieczne jest, aby znaleźć różnicę między dwoma różnymi czasami, aby określić „całkowitą” ilość czasu, którą ktoś pracował. same czasy są w następującym formacie

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

pierwszy to czas rozpoczęcia, drugi koniecczas, trzeci całkowity czas. Chociaż ta jest wyświetlana poprawnie, istnieje kilka wpisów, które muszą zostać sprawdzone i poprawione dwukrotnie (całkowity czas nie jest poprawny na podstawie czasu rozpoczęcia / zakończenia). Znalazłem kilka różnych rozwiązań w innych postach, ale większość z nich zawiera również daty i takie też (większość z nich używa awk), nie mam doświadczenia z awk, więc nie jestem pewien, jak usunąć fragment daty z tych przykładów. Słyszałem też, że mogę zamienić czasy na epokę unixową, ale byłem ciekawy, czy istnieją inne sposoby osiągnięcia tego, dzięki!

Odpowiedzi:

7 dla odpowiedzi № 1

Coś takiego może ci pomóc:

#!/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=%sn" "$start"
printf "Stop=%sn" "$stop"
printf "Difference=%s (given in file: %s)n" $(seconds2time $(($(time2seconds $stop)-$(time2seconds $start)))) "$difference"

Wynik to:

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

Uwaga: nic nie sprawdza, czy czasy są w prawidłowym formacie, nie wiem, jak wiarygodne są twoje dane.