diff options
author | Dave Reisner <dreisner@archlinux.org> | 2012-05-07 00:27:43 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-06-26 06:39:34 +0200 |
commit | a98fce08968febe7395b30f15f070f400da089ed (patch) | |
tree | 419123b22846a05a0eda74db324b6d3741208539 /scripts/library/size_to_human.sh | |
parent | ab8431c92953c4562af214e5170f8ef321037108 (diff) | |
download | pacman-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.sh | 20 |
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]) + }' +} |