Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bash- Converting a variable to human readable format (KB, MB, GB)

Tags:

bash

unix

In my bash script, I run through a list of directories and read in the size of each directory to a variable using the du command. I also keep a running total of the total size of the directories. The only problem is that after I get the total size, it's in an unreadable format (ex. 64827120). How can I convert the variable containing this number into GBs, MBs, etc?

like image 907
Swandrew Avatar asked Jul 13 '26 04:07

Swandrew


1 Answers

You can use numfmt to convert raw (decimal) numbers to human-readable form.  Use --to=iec to output binary-prefix numbers (i.e., K=1024, M=220, etc.)

$ printf '%s %s\n' 1000000 foo 1048576 bar | numfmt --to=iec
977K foo
1.0M bar

and use --to=si to output metric-prefix numbers (i.e., K=1000, M=106, etc.)

$ printf '%s %s\n' 1000000 foo 1048576 bar | numfmt --to=si
1.0M foo
1.1M bar

If you specifically want to get “MB”, “GB”, etc., use --suffix:

$ printf '%s %s\n' 1000000 foo 1048576 bar | numfmt --to=si --suffix=B
1.0MB foo
1.1MB bar

If your numbers are in a column other than the first (as in Mik R’s answer), use --field:

$ printf '/home/%s %s\n' foo 1000000 bar 1048576 | numfmt --to=si --field=2
/home/foo    1.0M
/home/bar    1.1M

Or you can convert numbers on the command line (instead of using a pipe):

$ numfmt --to=si 1000000 1048576
1.0M
1.1M
like image 186
G-Man Says 'Reinstate Monica' Avatar answered Jul 14 '26 21:07

G-Man Says 'Reinstate Monica'



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!