2014-12-22 7 views
6

Da un prompt della shell, qual è il minor numero di tasti per calcolare il valore di mm: ss di espressioni come 4:33 + 0:20 - 2:45 = 2:08?mm: ss calculator dal prompt della shell?

Questo è per uso interattivo, non per l'uso in uno script, o misurazione del tempo trascorso, o qualcosa di simile. Nessun topo Nessuna GUI.

Esistono migliaia di implementazioni di mm+60*ss e (mmss/60, mmss%60), in centinaia di lingue. Potrei scrivere uno script in bash o ruby ​​o C per questo, per aggiungere un'altra implementazione. Ma sembra probabile che questa ruota non abbia bisogno di essere reinventata, quando è probabilmente sepolta da qualche parte in bc, dc, irb, o forse anche nello stesso bash.

+0

Sono sicuro che ci fosse una tale implementazione con 'bc' da solo, ma non può ricordare lo farò segui le risposte nella tua domanda. +1 per questa domanda. – Skynet

+0

'base' di 'bc' va solo fino a 16, non 60 :-(. –

+0

sembra che non ci sia un modo breve e diretto per ottenerlo con gli strumenti standard.Piuttosto che istruzioni' date -d' incorporate. – deimus

risposta

3

Anche se non perfetto:

s="4:33 + 0:20 - 2:45" 
n=$(sed 's/\([0-9]*\):\([0-9]*\)/(\1 * 60 + \2)/g' <<< "$s" | bc) 
printf "%d:%02d\n" $(($n/60)) $(($n % 60)) 

Le uscite di comando sed (4 * 60 + 33) + (0 * 60 + 20) - (2 * 60 + 45) a bc.

L'uscita è: 2:08.

+1

Come risposta, lo propongo in .bashrc: 'tc() {n = $ (sed 's/\ ([0-9] * \): \ ([0-9] * \)/(\ 1 * 60 + \ 2)/g '<<< "$ 1" | bc); printf "% d:% 02d \ n "$ (($ n/60)) $ (($ n% 60))}} (Lo userei più spesso di'/sbin/tc'.) –

+0

Ancora meglio, sostituisci $ 1 con $ @ Quindi puoi invocarlo senza virgolette, ad esempio 'tc 4:33 + 20-2: 45' –

0

È impossibile in alcuni caratteri sul prompt calcolare l'ora in questo modo. Si può fare, ad esempio qualcosa come:

date -d "4:33 + 2:22" +%H:%M

, ma è necessario includere il fuso orario (e come viene calcolato il tempo), prendere l'uscita, calcolare ancora e! non superare i 24 ore. Quindi questo è ridicolo. Una delle possibili soluzioni può essere GNU/Unità. Esso fornisce i nomi di stenografia per alcune combinazioni comuni:

hms -> hours, minutes, seconds time -> years, days, hours, minutes and seconds

You have: 2 hours + 23 minutes + 32 seconds You want: seconds * 8612 /0.00011611705

Homepage: http://www.gnu.org/software/units/