!["awk with if / substr"이 예상대로 작동하지 않습니다.](https://linux55.com/image/117935/%22awk%20with%20if%20%2F%20substr%22%EC%9D%B4%20%EC%98%88%EC%83%81%EB%8C%80%EB%A1%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
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'로 시작하는 문자열보다 큽니다.
빼기는 수치 결과를 생성합니다.