синтаксические ошибки awk с двойной звездой ** - PullRequest
1 голос
/ 28 марта 2012

Я использую Debian 6 и GNU sed, пытаясь заставить awk преобразовать вывод du из длинной строки байтов в более читабельное число с суффиксами, такими как Mb и Kb. (Я знаю, что вы можете использовать опцию -h, но я хочу сделать это вручную с помощью awk.)

Пока что моя команда выглядит следующим образом (я вставил символы новой строки, чтобы сделать ее более читабельной):

du /test.img | grep [0-9]* | awk "{ sum=$1 ; hum[1024**3]='Gb';hum[1024**2]='Mb';
hum[1024]='Kb'; for (x=1024**3; x>=1024; x/=1024){ if (sum>=x)
{ printf '%.2f %s\n',sum/x,hum[x];break } }}"

Однако я получаю синтаксические ошибки от / около двойных звездочек:

awk: line 1: syntax error at or near *
awk: line 1: syntax error at or near *
awk: line 1: syntax error at or near *
awk: line 1: extra ')'
awk: line 1: syntax error at or near {

Если я сделаю все двойные звезды ** только одну звезду *, awk запускается, но я получаю неправильное число.

Что я могу сделать, чтобы исправить эти синтаксические ошибки и перестать быть awk в замешательстве? ба дум тш

1 Ответ

7 голосов
/ 28 марта 2012

Просто чтобы сделать его "официальным" (как ответ) ...

Вы используете ** для возведения в степень. В awk оператор ^ используется для возведения в степень. Я полагаю, что в Интернете есть много ссылок, но я нашел здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...