"awk with if / substr"이 예상대로 작동하지 않습니다.

"awk with if / substr"이 예상대로 작동하지 않습니다.

df 및 awk/if/substr을 사용하여 디스크 사용량이 70%를 초과하는 레코드를 필터링하고 싶습니다. 문제는 비교할 때 첫 번째 문자만 고려되는 것으로 나타난다는 것입니다.

주문하다:

# df -Pah | awk '{if(substr($5,1,length($5)-1)>70) print $5}'
Use%
9%
8%

그러나 다음과 같이 작동합니다.

주문하다:

# df -Pah | awk '{if(substr($5,1,length($5)-1)-70>0) print $5}'
100%
100%
100%
# df -Pah | awk '{if(substr($5,1,length($5)-1)-30>0) print $5}'
54%
35%
100%
100%
100%

이유를 아는 사람 있나요?

추신: df -Pah출력, 실제로는 종료와 동일합니다 df -h.

Filesystem  Size  Used Avail Use% Mounted on
/dev/sda2   2.0G 1020M  894M  54% /    
udev        4.0G  420K  4.0G   1% /dev
tmpfs       4.0G   16M  3.9G   1% /dev/shm

답변1

awk 비교는 왼쪽 피연산자의 유형에 따라 숫자 비교이거나 문자열 비교라는 것을 기억합니다. 이는 현재 보고 있는 내용을 설명합니다. substr문자열 결과를 제공하고 "U", "9"로 끝납니다. 및 "8" '로 시작하는 문자열은 '7'로 시작하는 문자열보다 큽니다.

빼기는 수치 결과를 생성합니다.

관련 정보