У меня есть сценарий bash, который вычисляет процент использованного дискового пространства для данного раздела:


    df -k $devname | grep -v ^File | awk '{printf ("%i",$3*100 / $2); }

Он не работает с разделом с длинным именем, потому что имя подталкивает другие столбцы к следующей строке, как мне это исправить?

df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup60-ROOT
                     2865493440 2222006740 497927968  82% /
tmpfs                 30913808         0  30913808   0% /dev/shm
/dev/sda1               495844    103347    366897  22% /boot
2
user3324120 18 Мар 2014 в 04:06
Проверьте другие варианты df, есть один, который сохраняет все в одной строке (возможно, как побочный эффект какого-то другого свойства). Удачи.
 – 
shellter
18 Мар 2014 в 04:09

2 ответа

Лучший ответ

Параметр -P (переносимость) для df использует выходной формат, совместимый с posix, и сохраняет все в одной строке. Вы также можете упростить часть awk, используя sel.

2
alicef 16 Июн 2015 в 15:57

Вместо анализа всей «таблицы» вы можете напрямую вывести использование в процентах, используя параметр --output (см. man 1 df для подробностей):

$ df -k --output=pcent /dev/sda1
Use%
 13%

Это должно быть намного проще отфильтровать.

Например. создав массив с помощью readarray в Bash 4:

$ readarray -t -s 1 percentage < <(df -k --output=pcent /dev/sda1)
$ echo "${percentage[0]// /}"
13%

Назначение вывода df массиву построчно:

$ percentage=($(df -k --output=pcent /dev/sda1))
$ echo "${percentage[1]}"
13%
6
Saucier 18 Мар 2014 в 04:52
1
+1 Ваше решение заставило меня перечитать справочную страницу для разных параметров FIELD_LIST для --output. Хорошая вещь.
 – 
jaypal singh
18 Мар 2014 в 04:51
1
Хех, спасибо - по моему опыту, многие инструменты, которые предлагают данные в какой-то таблице, также предлагают параметр для сбора определенных частей этих данных. Применяется, например, smartctl или nvidia-smi тоже. :)
 – 
Saucier
18 Мар 2014 в 04:58