Удалите сценарий удара экспоненциального представления

Из страницы справочника:

 -x      Two-byte hexadecimal display.  Display the input offset in hexa‐
         decimal, followed by eight, space separated, four column, zero-
         filled, two-byte quantities of input data, in hexadecimal, per
         line.

...

 If no format strings are specified, the default display is equivalent to
 specifying the -x option.

Ваш вывод является прямым порядком байтов (младший значащий байт сначала), который является также порядком байтов x86 и x86_64 архитектуры, которую Вы, вероятно, используете.

5
10.12.2013, 01:18
2 ответа

awk имеет функцию sprintf, которая предоставляет Вам доступ к printf "f" спецификатор формата.

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

производит

0.123456000
5
27.01.2020, 20:35
  • 1
    Сладкий, это работало на меня с RRDTool, которому действительно нравится давать экспоненциальное представление (например, 1404784800: 7.8472672909e+01) вывод. –  Drew Stephens 08.07.2014, 17:40

Для управления форматированием вывода, можно использовать printf любой непосредственно от awk или непосредственно через оболочку.

Однако можно также управлять выводом непосредственно с помощью du. Например, можно указать -h производить результаты в человекочитаемых форматах.

Примеры

$ 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

Форматирование использования printf

Но поскольку Вы заметили потерю разрешения с этим методом. Таким образом, если Вы действительно хотите сохранить более высокую степень разрешения, Вы вынуждены принять значения от du на более низком уровне, и затем форматируют вывод для установки, какие еще высокоуровневые единицы Вы хотите.

Пример

В использовании МБ du.

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

Используя 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

Можно управлять суммой точности, которую Вы хотите путем изменения аргумента printf. Вот 5 мест.

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

Заметьте, что это заботится раунду он правильно, где когда-либо Вы решаете отключить точность.

5
27.01.2020, 20:35

Теги

Похожие вопросы