2014-12-22 6 views
6

Von einer Shell-Eingabeaufforderung, was ist die am wenigsten Tastenanschläge Weg, um den mm: ss Wert von Ausdrücken wie 4:33 + 0:20 - 2:45 = 2:08 zu berechnen?mm: ss Rechner von Shell Prompt?

Dies ist für die interaktive Verwendung, nicht für die Verwendung in einem Skript, oder Messung der verstrichenen Zeit oder etwas Phantasie wie diese. Keine Maus. Keine GUI.

Es gibt Tausende von Implementierungen von mm+60*ss und (mmss/60, mmss%60), in Hunderten von Sprachen. Ich könnte dafür ein Skript in bash oder ruby ​​oder C schreiben, um noch eine weitere Implementierung hinzuzufügen. Aber es scheint wahrscheinlich, dass dieses Rad nicht neu erfinden muss, wenn es wahrscheinlich irgendwo in bc, dc, irb oder vielleicht sogar in bash selbst begraben ist.

+0

Ich bin sicher, es war eine solche Umsetzung mit 'bc' allein aber nicht daran erinnern kann, werde ich Folge Antworten in deiner Frage. +1 für diese Frage. – Skynet

+0

'bc's' ibase' geht nur bis 16, nicht 60 :-(. –

+0

sieht aus als gäbe es keinen kurzen und direkten Weg, um es mit den Standardwerkzeugen zu erreichen. Statt eingebetteten 'date-d' Anweisungen. – deimus

Antwort

3

Obwohl nicht perfekt:

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)) 

SED-Befehlsausgänge zu (4 * 60 + 33) + (0 * 60 + 20) - (2 * 60 + 45)bc.

Der Ausgang ist: 2:08.

+1

Als Antwort schlage ich dann dies in. Bashrc: 'tc() {n = $ (sed 's/\ ([0-9] * \): \ ([0-9] * \)/(\ 1 * 60 + \ 2)/g '<<< "$ 1" | bc); printf "% d:% 02d \ n "$ (($ n/60)) $ (($ n% 60));}' (Ich würde das häufiger verwenden als '/ sbin/tc'.) –

+0

Besser noch, ersetze $ 1 durch $ @ Dann können Sie es ohne Anführungszeichen aufrufen, zB 'tc 4:33 + 20-2: 45' –

0

Es ist in einigen wenigen Zeichen auf Prompt unmöglich, die Zeit so zu berechnen. Sie können zum Beispiel etwas tun:

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

, aber Sie müssen die Zeitzone enthalten (und wie die Zeit berechnet wird), nehmen Sie die Ausgabe, berechnen immer! Überschreiten Sie nicht 24 Stunden. Das ist also lächerlich. Eine der möglichen Lösungen kann GNU/Units sein. Es bietet eine Abkürzung Namen für einige gängige Kombinationen:

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/

Verwandte Themen