Допустим, у вас есть данные с количествами в удобочитаемом формате, например, вывод du -h
, и вы хотите в дальнейшем работать с этими числами. Допустим, вы хотите передать данные через grep для суммирования подмножества этих данных. Вы делаете это ad-hoc на многих системах, которые вы никогда раньше не видели, и используете только минимальные утилиты. Вам нужны преобразования суффиксов для всех стандартных суффиксов 10 ^ n.
Существует ли утилита gnu-linux для преобразования суффиксных чисел в реальные числа в конвейере? У вас есть функция bash, написанная для этого, или какой-нибудь Perl, который может быть легко запомнить, вместо длины регулярных выражений или нескольких шагов sed?
38M /var/crazyface/courses/200909-90147
2.7M /var/crazyface/courses/200909-90157
1.1M /var/crazyface/courses/200909-90159
385M /var/crazyface/courses/200909-90161
1.3M /var/crazyface/courses/200909-90169
376M /var/crazyface/courses/200907-90171
8.0K /var/crazyface/courses/200907-90173
668K /var/crazyface/courses/200907-90175
564M /var/crazyface/courses/200907-90178
4.0K /var/crazyface/courses/200907-90179
| grep 200907 | <amazing suffix conversion> | awk '{s+=$1} END {print s}'
Соответствующие ссылки:
/200907/
перед вашим кодом для каждой строки, например,awk '/200907/{s+=$1} END {print s}'
Ответы:
На основании моего ответа на один из вопросов, на которые вы ссылаетесь:
Другой метод, который используется:
источник
sed
команду в моем ответе, вы добавили бы предложения для обработки дополнительных суффиксов SI, как я показываю вawk
команде.s/T/ * 1000 G;
добавленный в начале добавил бы терабайт, например.Вы можете использовать регулярные выражения Perl, чтобы сделать это. Например,
Это простой скрипт. Вы можете рассматривать это как отправную точку. Надеюсь, это поможет!
источник
Лично я бы просто не использовал флаг -h. «Человекочитаемая» версия округляет числа, которые нужно будет снова округлить при обратном преобразовании, получая еще менее точные значения. (Например, 2.7MiB - 2831155.2 байта. Что вы делали с остальными 0.8-м байтом ??!)
В противном случае, вы можете попросить
units
преобразовать MiB / GiB / KiB просто в «B», и он справится с этим, но вам придется сделать что-то вроде (при условии, что ваш вывод вкладок, в противном случаеcut
соответственно)источник
units
отсутствует в моем минимальном дистрибутиве! Я думаю, что мы все сделали бы это по-другому, если бы у нас был полный контроль над всем.источник