![sed 및 여러 awk 호출을 사용하여 한 줄의 코드 단순화](https://linux55.com/image/101890/sed%20%EB%B0%8F%20%EC%97%AC%EB%9F%AC%20awk%20%ED%98%B8%EC%B6%9C%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%95%9C%20%EC%A4%84%EC%9D%98%20%EC%BD%94%EB%93%9C%20%EB%8B%A8%EC%88%9C%ED%99%94.png)
파티션 활용도가 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
sed
awk에서 이 작업을 제거하고 수행할 수 있습니다.
df -h | awk '{gsub(/%/,""); if($5 >=60) print $6, $5 "%"}' | column -t
column -t
awk가 값을 배열에 저장한 다음 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
이면 헤더 행이므로 NR
a를 추가하지 않습니다 .%
답변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"'