awk - 2つのフィルタを1つに結合

awk - 2つのフィルタを1つに結合

ルートパーティションで利用可能なMBを表示するように設定されたUbuntu 12.04のbashスクリプトには、この変数があります。

AV_MB=$(df -m |awk NR==2 |awk '{print $4}')

これら2つのawk表現を1つにまとめるエレガントな方法はありますか?それとも、sed、grep、またはcutを使用するより短い方法ですか?

答え1

Awkは「pattern {action}」モデルで動作するため、これら2つの手順を1つの正しい手順にまとめることができます。

 df -m | awk 'NR==2 {print $4}'

ただし、2番目のレコードが変更される可能性があるため(私のシステムでは、ルートレコードは3行目です)、これは脆弱であるため、次のようにルートファイルシステムレコードの最後のフィールドを一致させることができます。

df -m | awk '$NF == "/" {print $4}'

dfこれにより、印刷するたびにパターンが一致します/

答え2

探しているパーティションがわかっているので、df次のコマンドで指定してください。

df -m /

この--outputオプションを使用して、表示する列を定義することもできます。この場合、「使用可能」です。

df -m --output=avail /

からman df

--出力[=FIELD_LIST]

FIELD_LISTで定義された出力形式を使用するか、FIELD_LISTを省略した場合はすべてのフィールドを印刷します。

...

FIELD_LISTは、含める列のカンマ区切りリストです。有効なフィールド名は、「source」、「fstype」、「itotal」、「iused」、「iavail」、「ipcent」、「size」、「used」、「avail」、「pcent」、および「target」です。 )。情報ページ)。

ただし、この--outputオプションはGNUでのみ利用可能です。また、ヘッダーを印刷するので、tail -1最後の行を取得するためにパイプを接続する必要があります。

関連情報