Моя цель - получить диски больше 100G от lsblk.
У меня это работает, но это неловко. Я почти уверен, что это можно сократить. Либо с помощью чего-то совершенно отличного от lsblk, либо, возможно, я могу фильтровать удобочитаемые числа напрямую с помощью awk.
Вот что я собрал:
lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'
Он выводит только часть дисков sdx и nvmexxx размером более 100G. Именно то, что мне нужно.
Я доволен этим, но хочу учиться у вас больше, Гуру 😉
Ответы:
Вы можете указать желаемую форму вывода
lsblk
:Используемые параметры :
Тогда фильтрация будет проще:
В вашем случае это было бы для 100 ГБ
100*2^30
или100e9
/1e11
для 100 ГБ.источник
egrep '\d{12,}'
чтобы удалить строки с <12 цифрами в последовательности. Awk, конечно, более универсален.Вы также можете указать
lsblk
вывод в формате JSON и выполнить фильтрацию с помощьюjq
:Или:
Ограничить записи типа
disk
.( размер
1e11
100 ГБ. Замените на107374182400
(или100*1024*1024*1024
) для 100 ГиБ. Из-за округленияlsblk
сам без-b
отчетов 100 ГБ для размеров в диапазоне от 99,9278 до 100,0488 ГБ (по некоторым причинам))С помощью
lsblk -OJb
,lsblk
сообщает всю доступную информацию, которая позволяет вам сделать более точный выбор или выводить более или более релевантную информацию.Вы также можете получить информацию непосредственно от
/sys
. Сzsh
:источник
jq
(о котором я узнал всего несколько месяцев назад).пытаться
это будет grep и фильтровать одновременно.
$4 ~ /G$/
получить с размером в G$4+0 > 100
получить размер более 100G{print $1}
печать ИМЯКак правило, вы никогда не должны использовать
grep
иawk
в одной трубе.получить только диск (и без раздела): awk filtering
где
$6 == "disk"
выбрать только колонку с дискомполучить только диск (и без раздела): фильтрация lsblk
где
--nodeps
: -d, --nodeps не печатать рабов или владельцевисточник
--no-deps
опцией, в соответствии с общим стилем этого ответа)