세 번째 필드의 숫자가 X보다 큰 경우에만 행 인쇄 [중복]

세 번째 필드의 숫자가 X보다 큰 경우에만 행 인쇄 [중복]

다음 lsblk명령은 디스크 사용량을 바이트 단위로 인쇄합니다.

 lsblk -bio KNAME,TYPE,SIZE,MODEL| grep disk 

 sda   disk  298999349248 AVAGO
 sdb   disk 1998998994944 AVAGO
 sdc   disk 1998998994944 AVAGO
 sdd   disk 1998998994944 AVAGO
 sde   disk   98998994944 AVAGO

디스크가 300000000000보다 큰 경우 파이프 awkperl한 줄 문자 뒤에 추가하거나 다른 방법 으로 디스크를 인쇄하는 방법

예상 출력:

 lsblk -bio KNAME,TYPE,SIZE,MODEL| grep disk | ......
 sdb   disk 1998998994944 AVAGO
 sdc   disk 1998998994944 AVAGO
 sdd   disk 1998998994944 AVAGO

답변1

awk를 사용하는 대신 패턴 일치에 자체적으로 사용할 수 있습니다 grep.

lsblk -bio KNAME,TYPE,SIZE,MODEL| awk '/disk/ && $3> 300000000000 || NR==1'

즉, 과학적 가치가 있습니다 3e11.

답변2

짧은방법:

lsblk -nbio KNAME,TYPE,SIZE,MODEL | awk '$3>3e11'

  • -n( --noheadings) - 헤더를 인쇄하지 않습니다.

  • $3- 세 번째 필드( SIZE열)

  • 3e11-두번째-상징. 문자 E(또는 e)는 일반적으로 "시간"을 의미하는 데 사용됩니다." "( " 로 쓸 수 있음)의 거듭제곱과 지수 값으로 평가됩니다 . 즉, "× 10n두 실수의 m합 에 대해 n" " 을 사용하여 mEn표현되는 값입니다 m × 10n. 3e11와 동일합니다 300000000000.

답변3

펄 솔루션:

lsblk -bio KNAME,TYPE,SIZE,MODEL | perl -ane 'print if $F[2] > 3e11'

300_000_000_000을 값으로 사용할 수도 있습니다.

  • -n 인쇄하지 않고 입력 내용을 한 줄씩 읽습니다.
  • -a공백의 입력을 @F 배열로 분할

관련 정보