Я пишу сценарий оболочки, чтобы вычислить 15% от общего размера диска домашнего каталога пользователя. У меня есть команда, которая дает мне (что-то) то, что я хочу, но не уверен, что есть лучший способ сделать это.

df -hT /home/user1 | grep -vE '^Filesystem' | awk '{ print $2 }'

эта команда выводит:

<blank line>

516G

Как мне извлечь 516 мой вопрос, если эта команда правильный способ сделать это.

3 ответа3

1
  • Используйте $2+0 чтобы сделать это число в awk .
  • Вам не нужен grep поскольку вы можете выполнять поиск в самом awk .

Ты можешь использовать:

df -hT / |  awk '/^Filesystem/{ print ($2+0) * 15/100 }'
1

Я бы посоветовал вместо того, чтобы пытаться удалить «G», вместо этого указать размер блока. Это гарантирует, что вам не придется иметь дело со сложностью возврата что-то вроде M или K:

df -BG /home/user1 | awk 'NR==2 { print $3 * 0.15 }'

Возможно, лучше использовать -B1, а затем сделать версию для печати вручную:

df -B1 /home/user1 | awk 'NR==2 { split("K M G T P E", s); for(n=int($3*0.15); n>1024; n=rshift(n,10)) i++; print n s[i] }'

Вышеуказанное должно быть действительно для (GNU coreutils) версий 8.12 и 8.25 df .

Вывод df предоставляет информацию о разделе, который использует данный каталог ... который может хорошо работать, если у каждого из ваших пользователей есть собственный раздел. Тем не менее, в крупных организациях, более вероятно, что quota используется в ваших пользовательских каталогах. Пожалуйста , ознакомьтесь с man - страницами для quota (и друзья) , если это так.

1

Еще один способ сделать это в awk без grep:

df -hT /home/user | awk '$1 ~ "sda1"{gsub(/[A-Z]/,"",$4); print $4}'

Тест на передней панели блока awk $1~"sda1" просто проверяет, является ли ваш основной жесткий диск тем, на который смотрит df . Это намного безопаснее, чем захват записей df которые не содержат filesystem которая может выплеснуть больше, чем просто ваш основной диск, если вы вставите другой диск в коробку или смонтируете некоторые диски NFS.

gsub(/[A-Z]/, "", $4) просто заменяет любые заглавные буквы в $4 (размер диска) ничем "" . Этого должно быть достаточно, поскольку, как мне кажется, все суффиксы размера диска (K, M, G и т.д.) Являются заглавными буквами. После этого мы печатаем новые и улучшенные $4 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .