Как получить процент использования диска раздела как целое число?

Я хотел бы, чтобы метод получил использование диска конкретного раздела, при помощи каталога, где раздел смонтирован. Вывод должен просто быть целым числом без дополнения или после символов, поскольку я хотел бы сохранить его в переменной.

Я использовал df --output=pcent /mount/point, но должен обрезать вывод, поскольку он имеет ненужный заголовок, одиночный пробел, дополняющий перед значением и символом % после значения как так:

Use%
 83%

В этом случае вывод, который я хотел бы, просто будет 83. Я не знаю ни о каких недостатках к использованию вывода df, но радо принять другие методы, которые не полагаются на него.

16
задан 10 November 2016 в 04:02

7 ответов

Я использовал бы...

df --output=pcent /mount/point | tr -dc '0-9'

Не уверенный, если sed быстрее, но я никогда не могу помнить значения sed.

19
ответ дан 23 November 2019 в 02:29

Вот awk решение:

$ df --output=pcent /mnt/HDD | awk -F'%' 'NR==2{print $1}'   
 37

В основном, что происходит, вот то, что мы рассматриваем символ '%' как разделителя полей (разделитель столбца) и печатаем первый столбец 1$ только, когда количество записей равняется два (NR==2 часть)

, Если бы мы хотели использовать bash - только инструменты, то мы могли бы сделать что-то вроде этого:

bash-4.3$ df --output=pcent / | while IFS= read -r line; do 
>     ((c++)); 
>     [ $c -eq 2 ] && echo "${line%\%*}" ;
> done
 74

И для забавы, альтернатива sed через группу получения и -r для расширенного regex:

df --output=pcent | sed -nr '/[[:digit:]]/{s/[[:space:]]+([[:digit:]]+)%/\1/;p}'
7
ответ дан 23 November 2019 в 02:29

Можно передать по каналу к grep, который просто извлекает цифры:

df --output=pcent /mount/point | grep -o '[0-9]*'

Посмотрите, что он живет:

$ echo "Use%
> 83%" | grep -o '[0-9]*'
83
6
ответ дан 23 November 2019 в 02:29

sed решение

df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
  • 1d удаляет первую строку
  • ; для разделения, команды
  • s/^ // удаляют пространство из запуска строк
  • s/%//, удаляют % знак
6
ответ дан 23 November 2019 в 02:29

Так как решением

тустепа Bash был своего рода удар (Перенесенный Снова Оболочка) вентилятор в прошлом году, я думал, что предложу решение с помощью него.

$ DF_PCT=$(df --output=pcent /mnt/d)
$ echo ${DF_PCT//[!0-9]/}
5
  • Строка 1 получение df вывод к переменной DF_PCT.
  • Строка 2 полосы все, что не является цифрой в DF_PCT и отображает ее на экране.
  • Преимуществом перед принятым ответом является перевод строки после того, как процент (5 в этом случае) будет сгенерирован.
1
ответ дан 23 November 2019 в 02:29

Вот другое решение:

df | grep /mount/point | awk '{ print $5 }' | cut -d'%' -f1
1
ответ дан 23 November 2019 в 02:29

Я натолкнулся на сервер, где - output=pcent еще не был реализован, таким образом, я использовал нормальный вывод, фильтрованный столбцом, сопровождаемым regex: df /mount/point | awk '{print $5}' | tr -dc '0-9'

1
ответ дан 23 November 2019 в 02:29

Другие вопросы по тегам:

Похожие вопросы: