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'로 시작하는 문자열보다 큽니다.
빼기는 수치 결과를 생성합니다.