Diskussion:Runden und Formatieren von Zahlen in der bash
Aus BraLUG-Wiki
Sorry, ich muss einfach ein paar Sachen loswerden:
- wenn schon
bash
, dann kann man statt`expr 1 + 1`
auch gleich$((1 + 1))
nehmen- gut, wußte ich nicht...--Bergeruw 20:25, 29. Mai 2006 (CEST)
- m.M.n. sind die 2er-Einheiten zu bevorzugen (1 KiB = 1024 B statt 1 kB = 1000 B) - http://de.wikipedia.org/wiki/Speicherkapazität
- nun ja, kann man sehen wie man möchte denke ich...--Bergeruw 20:25, 29. Mai 2006 (CEST)
- für den relativ geringen Nutzen ist die Funktion ziemlich umständlich - mit
bc
geht es einfacher:
#!/bin/sh function my_format () { bc << EOD scale = 1; if ( $1 > (1000*1000*1000) ) print $1 / (1024*1024*1024)," GiB" else \\ if ( $1 > (1000*1000) ) print $1 / (1024*1024)," MiB" else \\ if ( $1 > 1000 ) print $1 / 1024," KiB" else \\ print $1," B" EOD }
Output bei deiner Eingabe:
298 B 2.9 KiB 29.1 KiB 291.0 KiB 2.8 MiB 28.4 MiB 284.1 MiB 2.7 GiB 27.7 GiB 277.5 GiB 1000 B
--MaD 14:58, 29. Mai 2006 (CEST)
Ziel war es ohne externe Programme wie z.B. bc
auszukommen -> die Lösung hatte ich vorher auch schon ;-) --Bergeruw 20:25, 29. Mai 2006 (CEST)
- Schon klar ;). Streng genommen ist ja
expr
auch ein externes Programm, wenn auch als Teil der GNU coreutils ziemlich verbreitet. Da eine Shell ohne externe Programme aber sowieso eher sinnlos ist, messe ich einer nicht wirklich performanten Implementierung nur als Skript nur akedemische Bedeutung bei, wenn sich durch Installation (wenn nicht schon vorhanden) eines kleinen Zusatzprogramms ohne große Abhängigkeiten eine viel einfachere und wahrscheinlich schnellere (ungetestet!) Lösung finden lässt. Eigentlich will ich aber selbst noch eine besseresh
/bash
-Implementierung finden ;). --MaD 22:44, 29. Mai 2006 (CEST)