Учитывая следующую подстроку, полученную из команды df /dev/sdb1 | tail -n 1
:
/dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData
Я хотел бы извлечь из этой строки 1952971772
и 74%
это в скрипте bash.
Я знаю, что мог бы использовать некоторые команды обрезки или что-то подобное, но это больше не будет работать, например, при изменении размера.
У меня также были мысли об использовании регулярных выражений или чего-то еще, но я бы хотел использовать наиболее рекомендуемый подход.
Спасибо заранее!
$ df /dev/sdb1 | awk '{ print $5 }' | tail -n 1
для процента и
$ df /dev/sdb1 | awk '{ print $2 }' | tail -n 1
для размера.
Без tail
:
df /home | awk 'NR==2 { print $2 }'
df /home | awk 'NR==2 { print $5 }'
awk '{ print $2 }'
получает 2-й столбец, где несколько разделителей считаются как 1. Таким образом, 2-й Столбец всегда одинаков для вашей системы для первой части команды.
NR
дает вам общее количество обрабатываемых записей или номер строки.
При публикации комментариев со своего смартфона (без bash для тестирования) я ошибался, считая, что команда cut
(сама по себе) может идентифицировать столбцы, разделенные переменным количеством пробелов.
Необработанный вывод:
$ df /dev/nvme0n1p4
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/nvme0n1p4 380829660 164179036 216650624 44% /mnt/c
OP хочет столбцы 2
и 5
. Команда cut
сама по себе не будет работать:
$ df /dev/nvme0n1p4 | cut -d ' ' -f2,5
380829660
-d ' '
устанавливает разделитель в один пробел между столбцами, которые портят вывод. Когда нужно использовать tr
, чтобы «сжать» несколько пробелов в одно:
$ df /dev/nvme0n1p4 | tr -s ' ' | cut -d ' ' -f2,5
1K-blocks Use%
380829660 44%
Полный вывод в соответствии со спецификациями OP:
$ df /dev/nvme0n1p4 | tail -n 1 | tr -s ' ' | cut -d ' ' -f2,5
380829660 44%
Как сказал @kevin, вы можете использовать awk
, чтобы выбрать только последнюю строку и вообще не использовать хвост, используя END
, а также если вы хотите напечатать два столбца одновременно Вы можете сделать это:
df /dev/sdb1 | awk 'END {print $2,$5}'
1952971772 74%
<час> Вы можете выбрать только 2-е столбцы:
$ df /dev/sdb1 | tail -1 | awk '{print $2}'
1952971772
Где $2
указывает положение Таблицы разделены столбцами. Вы можете использовать cut
, потому что он обрабатывает только одно вхождение TAB, и здесь есть несколько TAB для разделения столбца.