Назад | Перейти на главную страницу

Почему моя подкоманда awk не работает?

Когда я бегу

df -hl | grep '/dev/disk1' | awk '{sub(/%/, \"\");print $5}'

Я получаю следующую ошибку:

awk: syntax error at source line 1
context is
    {sub(/%/, >>>  \ <<< "\");}
awk: illegal statement at source line 1

Кажется, я не могу найти никакой документации по awk sub.

df -hl | grep '/dev/disk1'

возвращается

/dev/disk1                         112Gi   94Gi   18Gi    85% 24672655 4649071   84%   /

Как я понял, он должен возвращать процент использованного дискового пространства.

Вам просто нужно удалить пару обратных косых черт:

df -hl | grep '/dev/disk1' | awk '{sub(/%/, "");print $5}'

Awk sub Функция хорошо документирована для замены первого вхождения шаблона, переданного в качестве первого параметра, строкой, переданной в качестве второго параметра.

Здесь шаблон - это знак процента, а строка замены - это пустая строка. Как написано в вашем вопросе, второй параметр является недопустимой строкой, поэтому awk жалуется и уходит. Исправленный awk заявление удаляет % появляется в его вводе и отображает пятое поле.

Обратите внимание, что grep команда здесь избыточна, так как awk может выполнять только фильтрацию, поэтому команду можно упростить до:

df -hl | awk '/\/dev\/disk1/ {sub(/%/, "");print $5}'