2012-02-07 20 views
6

Mam uruchomione skrypty czasu gnu, które generują wyjście w postaci mm: ss.mm (minuty, sekundy i milisekundy, na przykład 1: 20.66) lub hh : MM: ss (godziny, minuty i sekundy, na przykład 1:43:38). Chcę przekonwertować to na sekundy (aby je porównać i narysować w postaci graficznej).Konwertuj GG: MM: SS.mm na sekundy w bashie

Jaki jest najprostszy sposób zrobić to za pomocą bash?

Odpowiedz

4

Zakładając, można uruchomić polecenie GNU date:

date +'%s' -d "01:43:38.123" 

Jeśli skrypt jest generowanie "mm: ss.mm" trzeba dodać "00:" na początku, lub date odrzuci to.

Jeśli korzystasz z systemu BSD (w tym Mac OS X), musisz uruchomić date -j +'%s' "0143.38", chyba że masz zainstalowaną datę GNU z MacPorts lub Homebrew lub coś podobnego.

+0

Po prostu wiadomość, że data będzie powodować problemy, jeśli próbujesz interpretować standardy takie jak widoczne w [GTFS] (https://developers.google.com/transit/gtfs/reference?hl=en#stop_timestxt), gdzie czas może przekroczyć 23 godziny. Np., 27:05:00 jest zgodny z prawem. –

8
$ TZ=utc date -d '1970-01-01 1:43:38' +%s 
6218 
+2

Lub ustaw strefę czasową w ciągu daty: "data-d" 1970-01-01 1: 43: 38Z '+% s " –

6

A jeśli chcesz czysty Bash można zrobić coś jak

IFS=: read h m s <<<"${hms%.*}" 
seconds=$((10#$s+10#$m*60+10#$h*3600)) 

The 10# części jest obowiązkowe, aby określić, że liczby są podane w radix 10. Bez tego można dostać błędy jeśli h, m lub s jest 08 lub 09 (jak Bash interpretuje liczby z wiodącym 0 w ósemkowym).

Powiązane problemy