awk - 두 개의 필터를 하나로 결합

awk - 두 개의 필터를 하나로 결합

루트 파티션에서 사용 가능한 MB를 표시하도록 설정된 우분투 12.04의 bash 스크립트에 이 변수가 있습니다.

AV_MB=$(df -m |awk NR==2 |awk '{print $4}')

이 두 awk 표현을 하나로 결합하는 우아한 방법이 있나요? 아니면 sed, grep 또는 cut을 사용하는 더 짧은 방법인가요?

답변1

Awk는 "pattern {action}" 모델에서 작동하므로 이 두 절차를 하나의 올바른 절차로 결합할 수 있습니다.

 df -m | awk 'NR==2 {print $4}'

그러나 두 번째 레코드가 변경될 수 있으므로(내 시스템에서는 루트 레코드가 세 번째 행임) 이는 취약하므로 다음과 같이 루트 파일 시스템 레코드의 마지막 필드를 일치시킬 수 있습니다.

df -m | awk '$NF == "/" {print $4}'

df이렇게 하면 인쇄할 때마다 패턴이 일치하게 됩니다 /.

답변2

찾고 있는 파티션을 알고 있으므로 df다음 명령에 지정하십시오.

df -m /

또한 이 --output옵션을 사용하여 표시할 열을 정의할 수 있습니다. 이 경우 "사용 가능"입니다.

df -m --output=avail /

에서 man df:

--출력[=FIELD_LIST]

FIELD_LIST에 의해 정의된 출력 형식을 사용하거나, FIELD_LIST가 생략된 경우 모든 필드를 인쇄합니다.

...

FIELD_LIST는 포함할 열의 쉼표로 구분된 목록입니다. 유효한 필드 이름은 'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent' 및 'target'입니다( 참조). 정보 페이지).

그러나 이 --output옵션은 GNU에서만 사용할 수 있습니다. 또한 헤더를 인쇄하므로 tail -1마지막 줄을 얻으려면 파이프를 연결해야 할 수도 있습니다.

관련 정보