lsblk + 특정 크기의 디스크만 인쇄

lsblk + 특정 크기의 디스크만 인쇄

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의 솔루션은 더욱 강력합니다.

관련 정보