パーティションのディスク使用率を整数としてキャプチャする方法は?


16

パーティションがマウントされているディレクトリを使用して、特定のパーティションのディスク使用量をキャプチャする方法が必要です。出力は、変数に保存したいので、パディングや後続の記号のない整数でなければなりません。

私はを使用しましdf --output=pcent /mount/pointたが、不要なヘッダー、値の前の単一スペースのパディング、および値の後に続く%記号があるため、出力をトリミングする必要があります。

Use%
 83%

この場合、私が望む出力は単純になります83。の出力を使用することの欠点を認識しdfていませんが、それに依存しない他のメソッドを受け入れます。


1
単純に解析しないのはなぜですか?
ジェイコブVlijm

1
欠点も見当たりません。dfでヘッダーを削除できます。tr -dc '0-9'

私は修正されたままです、dfからヘッダーを削除するスイッチが見つかりません。

私はマニュアルページと情報ページを読みましたが、@ bc2946088を見つけることができませんでしたtr
-Arronical

3
ヘッダーオプションの削除も検索しました。基本的に、GNU開発者はそれを実装することに消極的です。機能のリクエストがありましたが、彼らはノーと言いました。
セルギーKolodyazhnyy 16年

回答:


19

使用します...

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

sedの方が速いかどうかはわかりませんが、sedの値を思い出すことはできません。


1
timeテストに使用すると、sedと同じくらい高速であることがわかります。
-Arronical

4
@Arronicalは、出力が100%を超える場合を除き、大きな違いはないと思います。:P
ムル

@Arronicalムルが言ったこと。呼び出し時間が支配する可能性があります。
CVn

1
この場合、のtr方が読みやすいですsed
水田ランダウ

7

awkソリューションは次のとおりです。

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

基本的にここで何が起こるかは、 '%'文字をフィールド区切り文字(列区切り文字)として扱い、レコード数が2に等しい場合にのみ最初の列$ 1を印刷することです(NR==2part)

bash-onlyツールを使用したい場合、次のようなことができます。

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

Bash 2ステップソリューション

去年はややbash(Borne Again SHell)ファンだったので、それを使った解決策を提案すると思いました。

$ DF_PCT=$(df --output=pcent /mnt/d)
$ echo ${DF_PCT//[!0-9]/}
5
  • 行1はdf、変数への出力をキャプチャします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.