Если ввод иногда в ГБ, иногда в ТБ, я бы написал функцию для обработки обоих случаев (функции в руководстве GNU awk):
#!/usr/bin/awk -f
function num2gb(n) {
if (n ~ /T$/) return n * 1024; # if TB, scale
return n * 1; # else assume GB. * 1 converts to number
}
{ printf "%.2f G\n", num2gb($1) } # print, as an example
Then вы можете использовать функцию при чтении чисел из ввода, чтобы получить числа в ГБ:
/HDD Total/ { hdd_total = num2gb($NF) }
/HDD Used/ { hdd_used = num2gb($NF) }
Добавьте случаи для MB
и PB
, если требуется, и проверьте, ввод мыслит степенями 1024
или степенями 1000
.
При выводе вы, конечно, можете выбрать множитель по своему усмотрению.
Вышеприведенный сценарий будет автономным сценарием awk
, в командной строке вы должны сделать что-то вроде
$ somecmd | awk 'function num2gb(n) { if (n ~ /T$/) return n * 1024; return n*1; }
/some pattern/ { some action }
/other pattern/ { something with num2gb($n) ... } '