2012-02-07 12 views
6

Sono in esecuzione di alcuni script GNU time che genera l'uscita della forma mm: ss.mm (minuti, secondi e millisecondi, per esempio 1: 20.66) o hh : MM: ss (ore, minuti e secondi, ad esempio 1:43:38). Voglio convertirlo in secondi (per confrontarli e tracciarli in un grafico).Convertire HH: MM: SS.mm di secondi in bash

Qual è il modo più semplice per farlo utilizzando bash?

risposta

4

Supponendo che è possibile eseguire il comando GNU date:

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

Se lo script sta generando "mm: ss.mm" Avrai bisogno di aggiungere "00:" all'inizio, o date lo rifiuterà.

Se si utilizza un sistema BSD (incluso Mac OS X), è necessario eseguire date -j +'%s' "0143.38" a meno che non sia stata installata la data GNU con MacPorts o Homebrew o qualcosa del genere.

+0

Solo una nota che data eseguirà problemi se si sta tentando di interpretare standard come quelli visti in [GTFS] (https://developers.google.com/transit/gtfs/reference?hl=it#stop_timestxt), dove il tempo può andare oltre le 23 ore. Ad esempio, 27:05:00 è legittimo. –

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

O inserire il fuso orario nella stringa della data: "date -d" 1970-01-01 1: 43: 38Z '+% s " –

6

E se si vuole puro Bash si può fare qualcosa di simile

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

La 10# parte è obbligatorio specificare che i numeri sono dati in radix 10. Senza questo, si otterrebbe se gli errori h, m oppure s è 08 o 09 (poiché Bash interpreta i numeri con uno 0 iniziale in ottale).

Problemi correlati