Moim celem jest zdobycie dysków większych niż 100G z lsblk.
Mam to działa, ale jest niezręczne. Jestem prawie pewien, że można to skrócić. Albo używając czegoś zupełnie innego niż lsblk, albo może mogę filtrować liczby czytelne dla ludzi bezpośrednio za pomocą awk.
Oto, co zestawiłem:
lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'
Wyprowadza tylko część sdx i nvmexxx dysków większych niż 100G. Właśnie tego potrzebuję.
Jestem z tego zadowolony, ale chętnie dowiem się więcej od ciebie Guru us
Odpowiedzi:
Możesz określić formę wyjścia, z której chcesz
lsblk
:Zastosowane opcje :
Dzięki temu filtrowanie jest łatwiejsze:
W twoim przypadku byłoby to 100
100*2^30
GiB lub100e9
/1e11
100 GB.źródło
egrep '\d{12,}'
aby usunąć linie z <12 cyframi w sekwencji. Awk jest oczywiście bardziej uniwersalny.Możesz również powiedzieć,
lsblk
aby wyświetlać w formacie JSON i wykonać filtrowanie za pomocąjq
:Lub:
Aby ograniczyć do wpisów typu
disk
.(
1e11
jest 100 GB. Zamień na107374182400
(lub100*1024*1024*1024
) dla 100 GiB. Ze względu na zaokrąglanie,lsblk
sam bez-b
raportów 100G dla rozmiarów od około 99,9278 do 100,0488 GiB (z jakiegoś powodu))Dzięki
lsblk -OJb
,lsblk
zgłasza wszelkie dostępne informacje, które pozwala zrobić więcej grzywną drobnoziarnisty wyboru lub wyjście bardziej lub bardziej przydatnych informacji.Możesz również uzyskać informacje bezpośrednio z
/sys
. Zzsh
:źródło
jq
(o której dowiedziałam się kilka miesięcy temu).próbować
to będzie grepować i filtrować w tym samym czasie.
$4 ~ /G$/
otrzymaj rozmiar G w$4+0 > 100
uzyskać rozmiar powyżej 100G{print $1}
Nazwa wydrukuz reguły nigdy nie powinno być potrzeby stosowania
grep
iawk
w samej rury.aby uzyskać tylko dysk (i bez partycji): filtrowanie awk
gdzie
$6 == "disk"
wybierz tylko kolumnę z dyskiemaby uzyskać tylko dysk (i bez partycji): filtrowanie lsblk
gdzie
--nodeps
: -d, --nodeps nie drukuje niewolników ani posiadaczyźródło
--no-deps
opcji, zgodnie z ogólnym stylem tej odpowiedzi)