Created
December 14, 2017 21:13
-
-
Save jpluimers/0f21bf1d937fe0b9b4044f21944a90ec to your computer and use it in GitHub Desktop.
bash script to convert numbers (usually bytes) to IEC or SI human readable format
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# bytesToHuman based on https://unix.stackexchange.com/questions/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254 | |
# units from wikipedia (note I had to re-order Z and Y): | |
# - https://en.wikipedia.org/wiki/Binary_prefix | |
# - https://en.wikipedia.org/wiki/File_size | |
# - https://en.wikipedia.org/wiki/ISO/IEC_80000#Information_science_and_technology | |
# test cases from https://www.alteeve.com/w/IEC_and_SI_Size_Notations and https://en.wikipedia.org/wiki/File_size | |
# 64-bibt checks at https://superuser.com/questions/1030122/what-is-the-maximum-value-of-a-numeric-bash-shell-variable/1030129#1030129 | |
bytesToHumanIEC() { | |
b=${1:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Z,Y}iB) | |
while ((b > 1024)); do | |
d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))" | |
b=$((b / 1024)) | |
let s++ | |
done | |
echo "$b$d ${S[$s]}" | |
} | |
bytesToHumanSI() { | |
b=${1:-0}; d=''; s=0; S=(Bytes {k,M,G,T,E,P,Z,Y}B) | |
while ((b > 1000)); do | |
d="$(printf ".%02d" $((b % 1000 * 100 / 1000)))" | |
b=$((b / 1000)) | |
let s++ | |
done | |
echo "$b$d ${S[$s]}" | |
} | |
# test cases | |
echo bytesToHumanIEC test cases: | |
bytesToHumanIEC 0 | |
bytesToHumanIEC 1023 | |
bytesToHumanIEC 1048575 | |
bytesToHumanIEC 1073741823 | |
bytesToHumanIEC 1099511627775 | |
bytesToHumanIEC 1125899906842623 | |
bytesToHumanIEC 1152921504606846975 | |
## These are likekly not supported as they overflow on 64-bit systems: | |
bytesToHumanIEC 1180591620717411303423 | |
bytesToHumanIEC 1208925819614629174706175 | |
bytesToHumanIEC 1 | |
bytesToHumanIEC 1024 | |
bytesToHumanIEC 1048576 | |
bytesToHumanIEC 1073741824 | |
bytesToHumanIEC 1099511627776 | |
bytesToHumanIEC 1125899906842624 | |
bytesToHumanIEC 1152921504606846976 | |
bytesToHumanIEC 1180591620717411303424 | |
bytesToHumanIEC 1208925819614629174706176 | |
bytesToHumanIEC 2 | |
bytesToHumanIEC 1025 | |
bytesToHumanIEC 1048577 | |
bytesToHumanIEC 1073741825 | |
bytesToHumanIEC 1099511627777 | |
bytesToHumanIEC 1125899906842625 | |
bytesToHumanIEC 1152921504606846977 | |
bytesToHumanIEC 1180591620717411303425 | |
bytesToHumanIEC 1208925819614629174706177 | |
bytesToHumanIEC 0 | |
bytesToHumanIEC 1999 | |
bytesToHumanIEC 1999999 | |
bytesToHumanIEC 1999999999 | |
bytesToHumanIEC 1999999999999 | |
bytesToHumanIEC 1999999999999999 | |
bytesToHumanIEC 1999999999999999999 | |
bytesToHumanIEC 1999999999999999999999 | |
bytesToHumanIEC 1999999999999999999999999 | |
bytesToHumanIEC 1 | |
bytesToHumanIEC 1000 | |
bytesToHumanIEC 1000000 | |
bytesToHumanIEC 1000000000 | |
bytesToHumanIEC 1000000000000 | |
bytesToHumanIEC 1000000000000000 | |
bytesToHumanIEC 1000000000000000000 | |
## These are likekly not supported as they overflow on 64-bit systems: | |
bytesToHumanIEC 1000000000000000000000 | |
bytesToHumanIEC 1000000000000000000000000 | |
bytesToHumanIEC 1 | |
bytesToHumanIEC 1001 | |
bytesToHumanIEC 1000001 | |
bytesToHumanIEC 1000000001 | |
bytesToHumanIEC 1000000000001 | |
bytesToHumanIEC 1000000000000001 | |
bytesToHumanIEC 1000000000000000001 | |
bytesToHumanIEC 1000000000000000000001 | |
bytesToHumanIEC 1000000000000000000000001 | |
echo bytesToHumanSI test cases: | |
bytesToHumanSI 1 | |
bytesToHumanSI 1024 | |
bytesToHumanSI 1048576 | |
bytesToHumanSI 1073741824 | |
bytesToHumanSI 1099511627776 | |
bytesToHumanSI 1125899906842624 | |
bytesToHumanSI 1152921504606846976 | |
bytesToHumanSI 1180591620717411303424 | |
bytesToHumanSI 1208925819614629174706176 | |
bytesToHumanSI 1 | |
bytesToHumanSI 1000 | |
bytesToHumanSI 1000000 | |
bytesToHumanSI 1000000000 | |
bytesToHumanSI 1000000000000 | |
bytesToHumanSI 1000000000000000 | |
bytesToHumanSI 1000000000000000000 | |
bytesToHumanSI 1000000000000000000000 | |
bytesToHumanSI 1000000000000000000000000 | |
bytesToHumanSI 0 | |
bytesToHumanSI 1023 | |
bytesToHumanSI 1048575 | |
bytesToHumanSI 1073741823 | |
bytesToHumanSI 1099511627775 | |
bytesToHumanSI 1125899906842623 | |
bytesToHumanSI 1152921504606846975 | |
bytesToHumanSI 1180591620717411303423 | |
bytesToHumanSI 1208925819614629174706175 | |
bytesToHumanSI 1 | |
bytesToHumanSI 1024 | |
bytesToHumanSI 1048576 | |
bytesToHumanSI 1073741824 | |
bytesToHumanSI 1099511627776 | |
bytesToHumanSI 1125899906842624 | |
bytesToHumanSI 1152921504606846976 | |
bytesToHumanSI 1180591620717411303424 | |
bytesToHumanSI 1208925819614629174706176 | |
bytesToHumanSI 2 | |
bytesToHumanSI 1025 | |
bytesToHumanSI 1048577 | |
bytesToHumanSI 1073741825 | |
bytesToHumanSI 1099511627777 | |
bytesToHumanSI 1125899906842625 | |
bytesToHumanSI 1152921504606846977 | |
bytesToHumanSI 1180591620717411303425 | |
bytesToHumanSI 1208925819614629174706177 | |
bytesToHumanSI 0 | |
bytesToHumanSI 1999 | |
bytesToHumanSI 1999999 | |
bytesToHumanSI 1999999999 | |
bytesToHumanSI 1999999999999 | |
bytesToHumanSI 1999999999999999 | |
bytesToHumanSI 1999999999999999999 | |
bytesToHumanSI 1999999999999999999999 | |
bytesToHumanSI 1999999999999999999999999 | |
bytesToHumanSI 1 | |
bytesToHumanSI 1000 | |
bytesToHumanSI 1000000 | |
bytesToHumanSI 1000000000 | |
bytesToHumanSI 1000000000000 | |
bytesToHumanSI 1000000000000000 | |
bytesToHumanSI 1000000000000000000 | |
bytesToHumanSI 1000000000000000000000 | |
bytesToHumanSI 1000000000000000000000000 | |
bytesToHumanSI 1 | |
bytesToHumanSI 1001 | |
bytesToHumanSI 1000001 | |
bytesToHumanSI 1000000001 | |
bytesToHumanSI 1000000000001 | |
bytesToHumanSI 1000000000000001 | |
bytesToHumanSI 1000000000000000001 | |
bytesToHumanSI 1000000000000000000001 | |
bytesToHumanSI 1000000000000000000000001 | |
You have inverted exa and peta: E,P should be P,E
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
1073758208
is now shown as MiB but looks better as GiB (is more consistent withbtrfs
too, see nachoparker/btrfs-du#6 )