パーティション使用率が60%以上の場合にのみ印刷されるように、このコード行を単純化したいと思います。また、使用率の値にパーセント記号を追加したいと思います。
df -h | sed 's/%//g' | awk '{print $6,$5 }' | awk '{ if($2 >=60 ) print}' | column -t
私はBSDバリアントを使用していますが、そうです。いいえ一般的なGNUツールがインストールされました。
答え1
単純なgrepを使用する方が簡単です。 2つの列だけが交換されません。
$ df -h|egrep -o "(100|[6-9].)% /.*$"
65% /
93% /home
答え2
これでフラグが立てられたので、awk
これを修正してみましょう。 1つ目はawk
列6と5を列1と2に移動するためのものであるため、それを削除して2番目のawkで列6と5を使用できます。
df -h | sed 's/%//g' | awk '{ if($5 >=60 ) print $6, $5 }' | column -t
パーセント記号を追加することもできます。
df -h | sed 's/%//g' | awk '{ if($5 >=60 ) print $6, $5 "%"}' | column -t
sed
awkからこれを削除して実行できます。
df -h | awk '{gsub(/%/,""); if($5 >=60) print $6, $5 "%"}' | column -t
column -t
awkは値を配列に格納し、END
配列のステートメントループで最も長い名前を見つけてそれに応じて印刷することによってaを削除できますが、one liner
私の考えではこれはもはやaではありません.
答え3
両方の呼び出しを1つに置き換えてsed
組み合わせることができます。tr -d "%"
awk
$ df -h | tr -d "%" | awk '$5 >= 60 { print $6, $5 }' | column -t
ログインした割合を取得するには:
$ df -h | tr -d "%" | awk '$5 >= 60 { printf("%s %s%s\n", $6, $5, (NR>1?"%":"")) }' | column -t
Awkスクリプトの2番目のバージョンは、%
1より大きいかどうかに応じて、2番目の出力列に条件付きでaを追加します。 1NR
の場合、ヘッダー行なのでNR
aを追加しません。%
答え4
Perlが利用可能な場合:
df | perl -nE 'say "$2\t$1" if /(\d+)% (.*)/ and $1>60'
または
df | perl -nE '/(\d+)% (.*)/ and $1>60 and say "$2\t$1"'