Diskussion:Runden und Formatieren von Zahlen in der bash
Aus BraLUG-Wiki
(Unterschied zwischen Versionen)
MaD (Diskussion | Beiträge) (meine Meinung...) |
MaD (Diskussion | Beiträge) (kommentiert...) |
||
(2 dazwischenliegende Versionen von 2 Benutzern werden 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 | ||
− | * für den relativ geringen Nutzen ist die Funktion ziemlich umständlich - | + | ** 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: | ||
+ | |||
+ | <pre> | ||
+ | #!/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 | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | Output bei deiner Eingabe: | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
--[[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 besseresh
/bash
-Implementierung finden ;). --MaD 22:44, 29. Mai 2006 (CEST)