Diskussion:Runden und Formatieren von Zahlen in der bash

Aus BraLUG-Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(so wuerde ich das machen...)
(kommentiert...)
 
(Eine dazwischenliegende Version von einem Benutzer wird nicht angezeigt)
Zeile 1: Zeile 1:
 
Sorry, ich muss einfach ein paar Sachen loswerden:
 
Sorry, ich muss einfach ein paar Sachen loswerden:
 
* wenn schon <code>bash</code>, dann kann man statt <code>`expr 1 + 1`</code> auch gleich <code>$((1 + 1))</code> nehmen
 
* wenn schon <code>bash</code>, dann kann man statt <code>`expr 1 + 1`</code> auch gleich <code>$((1 + 1))</code> nehmen
 +
** gut, wußte ich nicht...--[[Benutzer:Bergeruw|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
 
* 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...--[[Benutzer:Bergeruw|Bergeruw]] 20:25, 29. Mai 2006 (CEST)
 
* für den relativ geringen Nutzen ist die Funktion ziemlich umständlich - mit <code>bc</code> geht es einfacher:
 
* für den relativ geringen Nutzen ist die Funktion ziemlich umständlich - mit <code>bc</code> geht es einfacher:
  
Zeile 34: Zeile 36:
  
 
--[[Benutzer:MaD|MaD]] 14:58, 29. Mai 2006 (CEST)
 
--[[Benutzer:MaD|MaD]] 14:58, 29. Mai 2006 (CEST)
 +
 +
Ziel war es ohne externe Programme wie z.B. <code>bc</code> auszukommen -> die Lösung hatte ich vorher auch schon ;-) --[[Benutzer:Bergeruw|Bergeruw]] 20:25, 29. Mai 2006 (CEST)
 +
: Schon klar ;). Streng genommen ist ja <code>expr</code> 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 <code>sh</code>/<code>bash</code>-Implementierung finden ;). --[[Benutzer:MaD|MaD]] 22:44, 29. Mai 2006 (CEST)

Aktuelle Version vom 29. Mai 2006, 21:44 Uhr

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