Как выбрать определенный столбец в команде linux df
Я пытаюсь собрать информацию о количестве свободного места на разных серверах. Поэтому, когда я выполняю df -k
я получаю вывод как:
Filesystem 1024-blocks Used Avail Capacity Mounted on
/dev/ad1s1f 125925198 2568970 113282214 2% /builds
И иногда вывод выглядит так:
Filesystem 1K-blocks Used Available Use% Mounted on
10.102.1.123:/storage/disk1/build
10735331328 10597534720 137796608 99% /buildbackup
Теперь я хочу получить данные о доступном дисковом пространстве. Итак, дайте мне знать, как получить данные из определенного столбца.
2 ответа
Вы можете, например, сказать:
df --output=source,avail
Или, как прокомментировал Тим Банс, вы можете использовать --direct
чтобы избежать длинного имени файловой системы, разделите строку на две части. Это покажет файловую систему как -
,
От man df
:
--output [= field_list]
используйте выходной формат, определенный FIELD_LIST, или напечатайте все поля, если FIELD_LIST опущен.
...
FIELD_LIST - это список разделенных запятыми столбцов, которые нужно включить. Допустимые имена полей: "source", "fstype", "itotal", "iused", "iavail", "ipcent", "size", "used", "util", "pcent" и "target" (см. информационная страница).
--непосредственный
показать статистику для файла вместо точки монтирования
Тестовое задание
$ df --output=source,avail
Filesystem Avail
/dev/sda7 321675536
Решение Федорки чище, но работает только для df
Более общий подход состоит в том, чтобы свернуть несколько пробелов в одну пробел, используя sed 's/ \+/ /g'
или же tr -s ' '
затем используйте cut
с пробелами в качестве разделителей: cut -d" " -f 4
Итак, команда:
df -k | tr -s ' ' | cut -d" " -f 4
Что приводит к чему-то вроде этого:
Available
26027952
854220
68376208
Тот же подход будет работать с другими командами, которые выводят данные в столбцы. Например ls -l | tr -s ' ' | cut -d" " -f 6,7,8
напечатает столбцы времени из ls -l
:
Dec 30 17:46
Mar 1 15:33
Mar 1 14:58
Mar 2 00:00
Jan 5 14:20
Mar 1 15:33
Feb 26 11:57
Feb 4 11:11
Mar 1 14:57