파티션의 디스크 사용률을 정수로 캡처하는 방법은 무엇입니까?


16

파티션이 마운트 된 디렉토리를 사용하여 특정 파티션의 디스크 사용량을 캡처하는 방법을 원합니다. 변수에 저장하고 싶기 때문에 출력은 패딩이나 다음 기호가없는 정수이어야합니다.

을 사용 df --output=pcent /mount/point했지만 불필요한 헤더, 값 앞에 단일 공백 ​​채우기 및 값 뒤에 % 기호가 있으므로 출력을 다듬어야합니다.

Use%
 83%

이 경우 원하는 출력은 간단합니다 83. 의 출력을 사용하는 데 따른 단점은 알지 df못하지만 그것에 의존하지 않는 다른 방법을 기꺼이 받아들입니다.


1
왜 단순히 구문 분석하지 않습니까?
Jacob Vlijm

1
단점도 보이지 않습니다. df로 헤더를 제거한 다음 | 그럴 -dc '0-9'

수정되었습니다 .df에서 헤더를 제거하는 스위치를 찾을 수 없습니다.

나는 맨 페이지와 정보 페이지를 읽었으며 @ bc2946088을 찾을 수 없었습니다 tr.
Arronical

3
헤더 옵션 제거도 검색했습니다. 기본적으로 GNU 개발자는 구현을 꺼려합니다. 기능 요청이 있었고 방금 거절했습니다.
Sergiy Kolodyazhnyy

답변:


19

사용하겠습니다 ...

df --output=pcent /mount/point | tr -dc '0-9'

sed가 더 빠른지 확실하지 않지만 sed 값을 기억할 수 없습니다.


1
time테스트에 사용하면 sed만큼 빠릅니다.
Arronical

4
@Arronical 당신의 출력이 100 % 이상 waaaaaaaaaaaay가 아니라면, 당신은 많은 차이를 볼 것입니다. : P
muru

@Arronical muru가 말한 것; 호출 시간이 지배적 일 수 있습니다.
CVn

1
이 경우 tr보다 읽기가 쉽습니다 sed.
Paddy Landau

7

awk 솔루션은 다음과 같습니다.

$ df --output=pcent /mnt/HDD | awk -F'%' 'NR==2{print $1}'   
 37

기본적으로 여기서 발생하는 일은 '%'문자를 필드 구분 기호 (열 구분 기호)로 취급하고 레코드 수가 2 ( NR==2부분) 와 같은 경우에만 첫 번째 열 $ 1을 인쇄한다는 것입니다

bash전용 도구 를 사용하려면 다음과 같이 할 수 있습니다.

bash-4.3$ df --output=pcent / | while IFS= read -r line; do 
>     ((c++)); 
>     [ $c -eq 2 ] && echo "${line%\%*}" ;
> done
 74

그리고 재미 sed를 위해 캡처 그룹과 -r확장 정규식을 통한 대안 :

df --output=pcent | sed -nr '/[[:digit:]]/{s/[[:space:]]+([[:digit:]]+)%/\1/;p}'

6

sed 해결책

df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
  • 1d 첫 번째 줄을 삭제
  • ; 명령을 분리
  • s/^ // 줄의 시작에서 공백을 제거하십시오
  • s/%//%기호 제거

6

grep숫자를 추출 하는에 파이프 할 수 있습니다 .

df --output=pcent /mount/point | grep -o '[0-9]*'

라이브보기 :

$ echo "Use%
> 83%" | grep -o '[0-9]*'
83

1

--output = pcent가 아직 구현되지 않은 서버에 왔으므로 일반 출력을 사용하고 열로 필터링 한 다음 정규 표현식을 사용했습니다. df /mount/point | awk '{print $5}' | tr -dc '0-9'


1
df에 -P 또는 --portability를 추가해야합니다. 그렇지 않으면 / mount / point가 길면 줄 바꿈되어 잘못된 값을 얻습니다.
SvennD

1

배쉬 2 단계 솔루션

작년에 bash (Borne Again SHell) 팬이었던 나는 그것을 사용하는 솔루션을 제안 할 것이라고 생각했습니다.

$ DF_PCT=$(df --output=pcent /mnt/d)
$ echo ${DF_PCT//[!0-9]/}
5
  • 1 행은 df출력을 variable로 캡처 합니다 DF_PCT.
  • 2 행은 숫자가 아닌 모든 것을 제거 DF_PCT하고 화면에 표시합니다.
  • 수락 된 답변보다 이점은 백분율 ( 5이 경우)이 생성 된 후 줄 바꿈 입니다.

1

또 다른 해결책은 다음과 같습니다.

df | grep /mount/point | awk '{ print $5 }' | cut -d'%' -f1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.