次の行の検索列インデックスから文字列を抽出しますか?

次の行の検索列インデックスから文字列を抽出しますか?

単純なディスク使用シェルスクリプト(ダッシュ)を作成しようとしていますが、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

おすすめ記事