df -kコマンドで数値を%に一致させる方法

df -kコマンドで数値を%に一致させる方法

私のbashスクリプトでdf -kコマンドを使って/ varパーティションの使用容量を印刷したいと思います。

私は次のことを行います

     df -k | grep var | awk '{print $5}'

問題は、「use%」の数字が4番目のフィールドに存在する場合もあり、5番目のフィールドに存在する場合もあり、他のフィールドに6つ以上が存在する場合もあることです。

だから合わせてみたい数値%varに分割

varパーティションの使用%の数を一致させる方法を提案します(エレガントな方法)

ありがとう

実施例1

df -k

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda3             13204256   4247972   8274728  34% /
/dev/sda5              5080796    141540   4677000   3% /tmp
/dev/sda2             14013128   7578564   5711240  58% /var
/dev/sda1               194442     40649    143754  23% /boot
tmpfs                  1037756         0   1037756   0% /dev/shm

実施例2

 df -k

  Filesystem           1K-blocks      Used Available Use% Mounted on
  /dev/mapper/SysGroup-lv_root
                  18578172   2680752  14953704  16% /
  tmpfs                   510240         0    510240   0% /dev/shm
  /dev/sda1               198337     50064    138033  27% /boot
  /dev/mapper/SysGroup-lv_tmp
                   5160576    141464   4756968   3% /tmp
  /dev/mapper/SysGroup-lv_var
                  28899452   3481568  23949880  13% /var

答え1

純粋なgrepソリューションはどうですか?

df -k | grep var | grep -o '[0-9]*%'

その後、Perl正規表現を使用してこれら2つのgrepを連結できます。

df -k | grep -Po 'var.* \K[0-9]*%'

答え2

正規表現を使用して % 数値を一致させることができます。

df -k | grep -E ' /run$' | grep -Eo '[0-9]+%'

いくつかの説明。

df -k
  • 説明が必要:ディスク使用可能テーブルを表示します。

    grep -E '/var$'

  • 拡張正規表現エンジンを使用したマウントポイントのgrep一致/var

  • 正規表現は/var$パターンを行の末尾に固定するため、どんなものとも一致しません/var/run/var/tmpこれは簡単なgrep varケースです。また、スラッシュの前のスペースに注意してください。

    grep -Eo '[0-9]+%'

    • -EGrepでは、PCRE正規表現が有効になります。
    • -o一致する文字列のみを印刷します。

正規表現はとても簡単です。

  • [0-9]任意の数字と一致
  • + 少なくとも1つの数字と一致することを意味します。
  • %%文字と一致

出力例:

$ df -k | grep -E ' /var$' | grep -Eo '[0-9]+%'
1%

良いことは、Use%がどこにあるかは重要ではないということです。

grepがPCRE正規表現をサポートしている場合(たとえば、Mac OSXではサポートされていない)、単一の正規表現を使用できます。

df -h | grep -Po '[0-9]+%(?= /var$)'

これはPerl正規表現を使用し、「look-behind」を使用してパターンを固定し、正規表現/var$と一致させます。気になる場合は、この機能についてお読みください。このチュートリアル

答え3

以下はあなたに必要なエレガントなソリューションです。

/varだけを望むなら

df --output=pcent /var

grepを使いたいなら

df --output=source,pcent | grep var

あるいは、5番目のフィールドが常にUse%のposix型を使用することもできます。

df -k --portability | grep var | awk '{print $5}'

答え4

あなたはそれを使用することができます:

.... | awk '{print $(NF-1)}'

出力ヘッダーにパターンが含まれていると、df印刷が発生する可能性がありますgrep。これを防ぐには、次の手順を実行してください。

.... | awk '$(NF-1) ~ /%/'

より一般的なアプローチであるPOSIXlyは、-P次のオプションを使用します。df:

df -P | .... | awk '{print $5}'

関連情報