Посмотрите что ответ на связанный вопрос: https://serverfault.com/a/382515/67675
Если Вы передаете по каналу df
в awk
, канал df -P
вместо этого. Это разработано, чтобы быть легко parsable, и в особенности не повреждает строки. Не забудьте пропускать строку заголовка (NR >= 2
).
Если необходимо проанализировать некоторый существующий вывод со странными разрывами строки, можно сказать строку продолжения, потому что он запускается с пространства.
awk '
NR==1 {next}
/^ / {print $1}
!/^ / {print $2}
'
Остерегайтесь однако, что существуют варианты Unix (OSX, по крайней мере — , и я не был бы удивлен, было ли это единственное, где это происходит на практике), где обозначение файловой системы может содержать пробелы, который делает любой основанный на столбце парсинг проблематичным (к сожалению, df -P
не использует вкладки).
У меня нет необычно длинного имени FS, но можно попробовать это:
df |grep "%" |grep -v Use |awk {'print $(NF-4)'}
Это предполагает, что Вам не нужна строка заголовка с 1K-блоками.
Используя GNU df
, вы можете использовать флаг -P
и передать его в awk
, как было предложено в других ответах. Пример для наглядности и простоты: для случая, когда вам нужно количество доступных килобайт (df -k
), отлично работает следующее:
df -kP | awk 'NR>1 {print $4}'
Это указывает awk на печать 4-го столбца для всех строк после первой (т.е. не строки заголовка).
В любом случае, основной причиной добавления этого ответа является наблюдение, что на Solaris (проверено на Solaris 9 и 10) этот флаг на самом деле не нужен, несмотря на аналогичные разрывы строк в форматировании вывода; следующее работает в этом случае:
df -k | awk 'NR>1 {print $4}'
df -Pk|tail -n +2|column -t | awk '{print $4}'
df -Pk
: перечислит файловую систему.tail -n +2
: удалит заголовок.column -t:
используется для форматирования вывода.awk '{print $4}'
: распечатает содержимое четвёртого столбца.