공간을 많이 차지하는 파일 시스템을 얻으려고 합니다. df
플래그(Gigabyte View)가 있는 명령을 사용하여 이 작업을 수행하려고 하는데 -g
예상한 값을 얻을 수 없습니다.
df -g | sed 's/%//g'| awk '+$5>=75 {print}' | head -10
다음 명령을 사용하면 오류가 발생합니다.
df -g | sed 's/%//g'| awk '{print $5>=75}' | head -4
에러 메시지:
Syntax Error The source line is 1.
The error context is
{print >>> $5>= <<<
awk: 0602-502 The statement cannot be correctly parsed. The source line is 1.
다음은 AIX에서 df -g 명령의 출력입니다.
/tmp>df -g | sed 's/%//g'| awk '$5 >= 75 { print }' | head -4
Filesystem GB blocks Free Used Iused Iused Mounted on
/dev/hd4 10.50 10.05 5 16492 1 /
/dev/hd2 25.50 18.15 29 64361 2 /usr
/dev/hd9var 2.50 0.72 72 4521 3 /var
전체 보기:
Filesystem GB blocks Free %Used Iused %Iused Mounted on
/dev/hd4 10.50 10.05 5% 16492 1% /
/dev/hd2 25.50 18.15 29% 64357 2% /usr
/dev/hd9var 2.50 1.39 45% 4512 2% /var
/dev/hd3 21.50 20.24 6% 1495 1% /tmp
AIX 7.1 PowerPC_POWER8에서 사용해 보았습니다. 내가 뭘 잘못했는지 모르겠어요!
답변1
tr
두 번 사용 하지 말고 awk
awk를 한 번만 사용하십시오.
df -g | awk '{ sub("%", "", $4); if ($4 >= 75) { print $4, $7 }}' | sort -n
그러면 필드 4의 백분율 기호가 빈 문자열로 대체됩니다(제거). 나머지 값이 75 이상이면 필드 4와 7이 인쇄된 다음 파이프로 정렬됩니다.
메모리 기반 개선스테판의 답변 중 하나:
df -g | awk '$4+0 >= 75 { print $4, $7 }' | sort -n
"+0" 추가는 엄격한 문자열 기반 비교가 아닌 숫자 비교를 강제합니다.
제목을 유지하려면 조건을 다음과 같이 변경하세요.
df -g | awk 'NR < 2 || $4+0 >= 75 { print $4, $7 }' | sort -n
답변2
코드 에 집중하세요 awk
:
awk '{print $5>=75}'
아마도
awk '$5 >= 75 { print }'
다섯 번째 필드의 값이 75보다 크거나 같으면 현재 입력 레코드가 출력됩니다.
얻은 출력으로 판단하면 백분율이 포함된 네 번째 필드인 것 같으므로 $4
대신 확인하고 싶을 수도 있습니다.$5
df -g | tr -d '%' | awk '$4 >= 75 { print }' | head -4
오류 메시지를 보면: awk
OpenBSD에서 사용됨(AIX와 정확히 같은 방식으로 불평하는 것 같음 awk
) 원본 코드에는 인쇄할 수 없기 때문에 구문 오류가 있습니다 $5 >= 75
(괄호 안에 넣지 않는 한, 이 경우 0으로 평가됩니다( false ) 또는 1(true)). mawk
행동은 동일합니다.
GNU는 awk
원래 코드의 구문을 허용하지만 여전히 사용자가 원하는 것은 아닙니다.
답변3
다음은 오류입니다... "파일 시스템 GB 블록 여유 공간이 Iused 마운트된 Iused를 사용하여 설치되었습니다."
해결책은 다음과 같습니다.
# df -g | grep Filesystem | sed 's/%//g'| awk '{print $5>=75}' | head -4