Diskussion:Runden und Formatieren von Zahlen in der bash

Aus BraLUG-Wiki

Wechseln zu: Navigation, Suche

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 bessere sh/bash-Implementierung finden ;). --MaD 22:44, 29. Mai 2006 (CEST)
'Persönliche Werkzeuge