5

When I convert MB to GB I'm getting below output. I want this output in normal format. When I use bc I'm getting an error. The text file contains nearly 100 such lines like this.

I want to print this in normal output, (without notation):

1.14441e-07
4.95911e-07
3.05176e-07
1.90735e-07
3.05176e-07

Commands:

$ DIVISOR=104857600
$ sudo  du --max-depth=1 /home/xxx | tail -1 | \
      awk -v DIVISOR=104857600 '{print $1/DIVISOR}'
1.14441e-07
4

awk has a sprintf function, which gives you access to the printf "f" format specifier.

echo  .123456 | awk '{ print sprintf("%.9f", $1); }'

produces

0.123456000
  • Sweet, this worked for me with RRDTool, which really likes to give scientific notation (e.g. 1404784800: 7.8472672909e+01) output. – Drew Stephens Jul 8 '14 at 14:40
5

To control the formatting of the output you can use printf either directly from awk or directly via the shell.

However you can also control the output directly using du. For example you can specify -h to output the results in human readable formats.

Examples

$ du -h --max-depth=1 /home/saml/apps | tail -1
9.0G    /home/saml/apps

$ du -h --max-depth=1 /home/saml/apps/gCAD3D  | tail -1
1.1M    /home/saml/apps/gCAD3D

Formatting using printf

But as you've noticed you lose resolution with this method. So if you truly want to keep a higher degree of resolution, you're forced to take the values from du at a lower level, and then format the output to fit which ever higher level units you want.

Example

In MB's using du.

$ du -m --apparent-size --max-depth=1 /home/saml/apps | tail -1
8916    /home/saml/apps

Using awk + printf.

$ DIVISOR=10487600
$ du --apparent-size --max-depth=1 /home/saml/apps | \
      tail -1 | awk -v D=$DIVISOR '{printf "%.9f\n", $1/D}'
0.870499638

You can control the amount of precision you want by changing the argument to printf. Here's 5 places.

$ DIVISOR=10487600
$ du --apparent-size --max-depth=1 /home/saml/apps | \
      tail -1 | awk -v D=$DIVISOR '{printf "%.5f\n", $1/D}'
0.87050

Notice that it takes care to round it correctly where ever you decide to cut off the precision.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.