Diskussion:Runden und Formatieren von Zahlen in der bash

Aus BraLUG-Wiki

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
(meine Meinung...)
 
(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 - mir ist aber noch nix besseres eingefallen...
+
* 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 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)

'Persönliche Werkzeuge