2

Когда я использую df -h, я получаю следующий вывод:

Используемый размер файловой системы. Используется. Используется%.

/dev/mapper/VolGroup00-LogVol00 59G 2.2G 54G 4% /

/dev/sda1 122M 38M 78M 33% /boot

tmpfs 1.1G 0 1.1G 0% /dev/shm

10.10.0.105:/somepath

                   11T  8.4T  2.1T  81% /storage4

10.11.0.101:/somepath

                   15T  8.9T  5.9T  61% /storage1

/dev/mapper/patha 5.0T 255G 4.8T 5% /storage5_vol0

/dev/mapper/pathb 5.0T 195G 4.9T 4% /storage5_vol1

/dev/mapper/pathc 5.0T 608G 4.5T 12% /storage5_vol2

Я хочу написать скрипт, который получает значение столбца « Доступно» в определенном хранилище.

Я использовал, чтобы использовать

df -k / имя_хранилища | хвост -1 | awk '{print $ 3}'

Но столбец FileSystem может иметь значение или нет .. что изменит переменную моего скрипта с $ 3 на $ 4.

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

4 ответа4

3

Просто включите POSIX-совместимый вывод (-P) в df:

$ df -Pk /dev/sda1 | tail -n 1 | awk '{print $4}'

Это гарантирует, что формат каждой строки одинаков (без перевода строки после длинных имен устройств).

2

Используйте опцию -P для df, чтобы убедиться, что вывод нормализован и не разбит на несколько строк.

И, в любом случае, вы всегда можете использовать $(NF-2) для печати доступного столбца.

0

Отработайте переменную NF (количество полей). Что-то вроде :

df -k /storage_name | tail -1 | awk 'NF == 6 {print $ 3}; NF == 5 {print $ 4}'

0
df -k /dev | tail -1 | sed s/"^[^0-9]*"// | awk '{print $3}'

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

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