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) (so wuerde ich das machen...) |
||
| Zeile 2: | Zeile 2: | ||
* 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 | ||
* 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 - | + | * 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) | ||
Version vom 29. Mai 2006, 14:31 Uhr
Sorry, ich muss einfach ein paar Sachen loswerden:
- wenn schon
bash, dann kann man statt`expr 1 + 1`auch gleich$((1 + 1))nehmen - 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 - mit
bcgeht 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)