sed 및 여러 awk 호출을 사용하여 한 줄의 코드 단순화

sed 및 여러 awk 호출을 사용하여 한 줄의 코드 단순화

파티션 활용도가 60% 이상인 경우에만 인쇄되도록 이 코드 줄을 단순화하고 싶습니다. 또한 활용도 값에 백분율 기호를 추가하고 싶습니다.

df -h | sed 's/%//g' | awk '{print $6,$5 }' | awk '{ if($2 >=60 ) print}' | column -t

저는 BSD 변형을 사용하고 있는데 그렇습니다.아니요일반적인 GNU 도구가 설치되었습니다.

답변1

간단한 grep을 사용하는 것이 더 쉽습니다. 두 개의 열만 교환되지 않습니다.

$ df -h|egrep -o "(100|[6-9].)% /.*$"
65% /
93% /home

답변2

이제 이것이 플래그 지정되었으므로 awk이를 수정해 보겠습니다. 첫 번째는 awk열 6과 5를 열 1과 2로 이동하기 위한 것이므로 이를 제거하고 두 번째 awk에서 열 6과 5를 사용할 수 있습니다.

df -h | sed 's/%//g' | awk '{ if($5 >=60 ) print $6, $5 }' | column -t

백분율 기호를 추가할 수도 있습니다.

df -h | sed 's/%//g' | awk '{ if($5 >=60 ) print $6, $5 "%"}' | column -t

sedawk에서 이 작업을 제거하고 수행할 수 있습니다.

df -h | awk '{gsub(/%/,""); if($5 >=60) print $6, $5 "%"}' | column -t

column -tawk가 값을 배열에 저장한 다음 END배열의 명령문 루프에서 가장 긴 이름을 찾아 그에 따라 인쇄함으로써 a를 제거 할 수 있지만 one liner제 생각에는 이것은 더 이상 a가 아닙니다.

답변3

두 호출을 하나로 대체 sed하고 결합 할 수 있습니다 .tr -d "%"awk

$ df -h | tr -d "%" | awk '$5 >= 60 { print $6, $5 }' | column -t

로그인된 비율을 얻으려면:

$ df -h | tr -d "%" | awk '$5 >= 60 { printf("%s %s%s\n", $6, $5, (NR>1?"%":"")) }' | column -t

Awk 스크립트의 두 번째 버전은 %1보다 큰지 여부에 따라 두 번째 출력 열에 조건부로 a를 추가합니다. 1 NR이면 헤더 행이므로 NRa를 추가하지 않습니다 .%

답변4

Perl을 사용할 수 있다면:

df | perl -nE 'say "$2\t$1"   if /(\d+)% (.*)/ and $1>60'

또는

df | perl -nE '/(\d+)% (.*)/ and $1>60 and  say "$2\t$1"'

관련 정보