単純なディスク使用シェルスクリプト(ダッシュ)を作成しようとしていますが、AWK構文に慣れていないため、文字列を解析する方法がわかりません。
私は次のコマンドを使用します。df -P -BG /
たとえば、次のような出力が表示されます。
Filesystem xxxxxxxxxx-blocks Used Available Capacity Mounted on
/dev/mapper/xxx_crypt 500G 200G 100G xx% /
「使用済み」(最終的には「使用可能」)の下の列を抽出したいのですが、どうすればよいかわかりません。 AWKには次の検索コマンドがあることがわかります。awk '/Used/ {print}'
しかし、その下の行を取得する方法がわかりません。どのようなヒントがありますか?たとえば、df -P -BG / | awk '...'
シェル変数に格納するので、1行でパイプとして機能することが重要ですが、複数行のAWKを使用できるため、必ずしも必要とは思いません。
ベストアンサー1
実装がサポートしている場合は、構文解析の代わりにdf
使用できます。私のアーチLinux--output
から:man df
--output[=FIELD_LIST]
use the output format defined by FIELD_LIST, or print all fields if
FIELD_LIST is omitted.
[...]
FIELD_LIST is a comma-separated list of columns to be included.
Valid field names are: 'source', 'fstype', 'itotal', 'iused',
'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent',
'file' and 'target' (see info page).
したがって、あなたの場合は、次のことを行います。
$ df -BG --output="used" /
Used
200G
本当に構文解析が必要な場合は、パターンマッチングにまったく気にしません。入力を制御しても変更されないため、3番目のフィールド(私のシステムの出力)のみを印刷できます。
$ df -P -BG / | awk '{print $3}'
Used
44G
フィールドの順序が変わっても機能する必要がある場合、文字列を含むフィールドを見つける必要がある場合は、Used
次のように複雑な操作を実行できます。
$ df -P -BG / |
awk '{ if(NR==1){for(i=1; i<=NF; i++){ if($i ~ /Used/){want=i}}} print $want}'
Used
44G