私の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]+%'
-E
Grepでは、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}'