summaryrefslogtreecommitdiffstats
path: root/scripts/library/size_to_human.sh
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2012-05-07 00:27:43 +0200
committerDan McGee <dan@archlinux.org>2012-06-26 06:39:34 +0200
commita98fce08968febe7395b30f15f070f400da089ed (patch)
tree419123b22846a05a0eda74db324b6d3741208539 /scripts/library/size_to_human.sh
parentab8431c92953c4562af214e5170f8ef321037108 (diff)
downloadpacman-a98fce08968febe7395b30f15f070f400da089ed.tar.gz
pacman-a98fce08968febe7395b30f15f070f400da089ed.tar.xz
scripts/library: add size_to_human
This function is the reverse of human_to_size, and converts integer byte sizes to human readable SI prefixed values. A logical extension of this might be to mimic the formatter that pacman uses and allow a second argument to be passed in which can coerce the size, rather than reducing until the unit count is below 1024. Signed-off-by: Dave Reisner <dreisner@archlinux.org>
Diffstat (limited to 'scripts/library/size_to_human.sh')
-rw-r--r--scripts/library/size_to_human.sh20
1 files changed, 20 insertions, 0 deletions
diff --git a/scripts/library/size_to_human.sh b/scripts/library/size_to_human.sh
new file mode 100644
index 00000000..9c0f0de2
--- /dev/null
+++ b/scripts/library/size_to_human.sh
@@ -0,0 +1,20 @@
+size_to_human() {
+ awk -v size="$1" '
+ BEGIN {
+ suffix[1] = "B"
+ suffix[2] = "KiB"
+ suffix[3] = "MiB"
+ suffix[4] = "GiB"
+ suffix[5] = "TiB"
+ count = 1
+
+ while (size > 1024) {
+ size /= 1024
+ count++
+ }
+
+ sizestr = sprintf("%.2f", size)
+ sub(/\.?0+$/, "", sizestr)
+ printf("%s %s", sizestr, suffix[count])
+ }'
+}