web-dev-qa-db-ja.com

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

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

df --output=pcent /mount/pointを使用しましたが、不要なヘッダー、値の前にスペースが1つ埋め込まれ、値の後に%記号が続くため、出力をトリミングする必要があります。

Use%
 83%

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

16
Arronical

使用したい...

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

Sedの方が速いかどうかはわかりませんが、sedの値を思い出せません。

19
user508889

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

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

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

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}'
8

数字を抽出するだけのgrepにパイプできます。

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

ライブで見る:

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

sedソリューション

df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
  • 1d最初の行を削除
  • ;はコマンドを分離します
  • s/^ //行の先頭からスペースを削除します
  • s/%//削除%記号
6
Zanna

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
1
Feriman

--output = pcentがまだ実装されていないサーバーに遭遇したため、通常の出力を使用し、列でフィルター処理した後、正規表現を使用しました:df /mount/point | awk '{print $5}' | tr -dc '0-9'

1
Ramon Fincken