проверка состояния «если» не работает для меня, когда я использую awk - PullRequest
0 голосов
/ 06 ноября 2018

Набор пользователей, имеющих дисковое пространство в / nobackup. Я хочу отфильтровать пользователей, которые используют больше 70G пространства

формат ВХОДА: Дисковое пространство dir / username

ВХОД:

351G    /nobackup/dwoo
80G     /nobackup/snjos
73G     /nobackup/ka
67G     /nobackup/mseer
67G     /nobackup/monche
65G     /nobackup/sambut
64G     /nobackup/submee
64G     /nobackup/jushe
64G     /nobackup/dichr
63G     /nobackup/n

Изменение этого вывода с помощью AWK для печати имен, только если дисковое пространство превышает 70G

cat /tmp/test | awk '{var=substr($1, 1, length($1)-1); split($2,a,"/"); if(var > 70) {print a[3]}}'

На выходе я получаю только

snjos
ka

Где мне взять

dwoo
snjos
ka

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Вы определяете var, но никогда не используете его. Я бы порекомендовал позволить awk лишить G и разделить путь, изменив разделитель полей:

 awk '$1 > 70 { print $NF}' FS=[G/] /tmp/test

Обратите внимание, что этот подход будет неправильно соответствовать пользователю, использующему 800M, но это неотъемлемый недостаток вашего подхода, который требует другого решения.

0 голосов
/ 06 ноября 2018

Учитывая, что у вас Linux O.S, попробуйте следующее. ИМХО, нет необходимости помещать значения дискового пространства в файл Input_file и читать их, используя команду df напрямую с awk.

df -hP | awk '/nobackup/ && && $3 ~ /G/ && $3+0>70'
0 голосов
/ 06 ноября 2018

Поскольку $ 1 - это строка (содержит недицифы), оператор > представляет собой лексическое сравнение (т. Е. Порядок словаря), где "3" <"7" , Сначала нужно преобразовать 1 доллар в число: поместите его в числовой контекст, добавив ноль. </p>

if ($1 + 0 > 70) {print a[3]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...