Дана следующая подстрока, полученная из команды df /dev/sdb1 | tail -n 1
:
/dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData
Я хотел бы извлечь 1952971772
и 74%
из этой строки, чтобы использовать его в сценарии bash.
Я знаю, что мог бы использовать некоторые команды обрезки или что-то еще, но это больше не будет работать, например, при изменении размера.
У меня также были мысли об использовании регулярных выражений или чего-то еще, но я хотел бы использовать наиболее рекомендуемый подход.
Заранее спасибо!
command-line
bash
Николя ДУВОЙСИН
источник
источник
df
конкретном? Если последнее, вы можете указать конкретные выходные поля, например,df --output=pcent /dev/sdb1
cut
положение символа в строке, что приводит к сбою при изменении длины строки в зависимости от размера файла. Я полагаю, что вы можете сказать,cut
чтобы выбрать столбец2
и столбец,5
выделенный пробелами, но я разговариваю по телефону и не могу исследовать и эффективно опубликовать ответ.cut
будет видеть один столбец после каждого разделителя.Ответы:
для процента и
для размера.
Без
tail
:awk '{ print $2 }'
получает 2-й столбец, где несколько разделителей считаются как 1. Таким образом, 2-й столбец всегда одинаков для вашей системы для 1-й части команды.
NR
дает вам общее количество обрабатываемых записей или номер строки.источник
df /home | awk '{print $2; print $5;}'
.END
блоке, поэтому вместо использованияtail
просто используйтеawk 'END { print $2,$5}'
Отредактированный ответ
Как сказал @kevin, вы можете использовать,
awk
чтобы выбрать только последнюю строку и вообще не использовать tail, используя команду,END
а также, если вы хотите напечатать два столбца одновременно, вы можете сделать это:Оригинальный ответ
Вы можете выбрать только 2-е столбцы:
Где
$2
указывает положение разделенных табуляцией столбцов. Вы можете использовать,cut
потому что он обрабатывает только одно вхождение TAB, и здесь есть несколько TAB для разделения столбца.источник
END
блоке, поэтому вместо использованияtail
просто используйтеawk 'END { print $2,$5}'