18G보다 크거나 같은 모든 디스크를 인쇄하고 싶습니다.
디스크만 인쇄하려면 다음 구문을 어떻게 적용할 수 있습니까? => 18G
lsblk -l | awk '/disk/'
fd0 2:0 1 4K 0 disk
sda 8:0 0 150G 0 disk
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
sdf 8:80 0 20G 0 disk
sdg 8:96 0 20G 0 disk
sdh 8:112 0 20G 0 disk
sdi 8:128 0 20G 0 disk
sdj 8:144 0 2G 0 disk
sdk 8:160 0 2G 0 disk
답변1
lsblk
+awk
+numfmt
해결책:
lsblk -lnb | awk '$4>=19327352832' | numfmt --to=iec --field=4
lsblk
옵션:
-n
- 헤더 행을 인쇄하지 않음-b
- 사람이 읽을 수 있는 형식 대신 SIZE 열을 바이트 단위로 인쇄합니다.
awk
세부 사항:
$4
- 네 번째 필드 값(SIZE
열)19327352832
-18G
바이트 단위와 동일
numfmt
옵션:
--to=iec
- 출력 수량의 자동 스케일링은UNITs
선택적인 단일 문자 접미사를 허용합니다.1K = 1024, 1M = 1048576, ...
--field=<FIELDS>
- 이 입력 필드의 숫자 바꾸기/변환FIELDS
답변2
내 것은 lsblk
작동하지 않지만 당신에게는 효과가 있을까요?
lsblk -l | awk '{
if ($4~/.*G/ && $4/1 >= 18) ||
($4~/.*T/)
print $0;
}'
#As a single line:
lsblk -l | awk '{if ($4~/.*G/ && $4/1 >= 18) || ($4~/.*T/){print $0}}'
awk
프로그램
$4~/.*G/
다음으로 끝나는 필드 4의 모든 패턴과 일치합니다.G
$4/1 >= 18
로 끝나는 경우G
나누고1
(G 제거) 다음보다 크거나 같은지 확인합니다.18
$4~/.*T/
또는 필드 4의 문자열이T
그것으로 끝나는 경우 통과합니다.
노트: RomanPerekhrest의 솔루션은 더욱 강력합니다.