多くのスペースを占めるファイルシステムを取得しようとしています。df
フラグ(Gigabyte View)を持つコマンドを使用してこの操作を実行しようとしていますが、-g
予想される値を取得できません。
df -g | sed 's/%//g'| awk '+$5>=75 {print}' | head -10
次のコマンドを使用するとエラーが発生します。
df -g | sed 's/%//g'| awk '{print $5>=75}' | head -4
エラーメッセージ:
Syntax Error The source line is 1.
The error context is
{print >>> $5>= <<<
awk: 0602-502 The statement cannot be correctly parsed. The source line is 1.
以下は、AIXのdf -gコマンドの出力です。
/tmp>df -g | sed 's/%//g'| awk '$5 >= 75 { print }' | head -4
Filesystem GB blocks Free Used Iused Iused Mounted on
/dev/hd4 10.50 10.05 5 16492 1 /
/dev/hd2 25.50 18.15 29 64361 2 /usr
/dev/hd9var 2.50 0.72 72 4521 3 /var
全体を見る:
Filesystem GB blocks Free %Used Iused %Iused Mounted on
/dev/hd4 10.50 10.05 5% 16492 1% /
/dev/hd2 25.50 18.15 29% 64357 2% /usr
/dev/hd9var 2.50 1.39 45% 4512 2% /var
/dev/hd3 21.50 20.24 6% 1495 1% /tmp
AIX 7.1 PowerPC_POWER8で試してみました。何が間違っているのかわかりません!
答え1
tr
2回使用しないで、awk
awkを1回だけ使用してください。
df -g | awk '{ sub("%", "", $4); if ($4 >= 75) { print $4, $7 }}' | sort -n
これにより、フィールド4のパーセント記号が空の文字列に置き換えられます(削除)。残りの値が75以上の場合、フィールド4と7が印刷され、パイプでソートされます。
メモリベースの改善ステファンの答えの一つ:
df -g | awk '$4+0 >= 75 { print $4, $7 }' | sort -n
「+0」を追加すると、厳密な文字列ベースの比較ではなく、数値比較が強制されます。
タイトルを維持するには、条件を次のように変更してください。
df -g | awk 'NR < 2 || $4+0 >= 75 { print $4, $7 }' | sort -n
答え2
コードに焦点を当てるawk
:
awk '{print $5>=75}'
おそらく
awk '$5 >= 75 { print }'
5番目のフィールドの値が75以上であれば、現在の入力レコードが出力されます。
得られた出力で判断すると、パーセンテージを含む4番目のフィールドのようですので、$4
代わりに確認したい場合があります。$5
df -g | tr -d '%' | awk '$4 >= 75 { print }' | head -4
エラーメッセージを見ると:awk
OpenBSDで使用されています(AIXとまったく同じように文句を言っているようですawk
)、元のコードには印刷できないため、構文エラーがあります$5 >= 75
(括弧に入れない限り、この場合は0と評価されます(false)または1 (true)).mawk
行動は同じです。
GNUはawk
元のコードの構文を受け入れますが、それでもユーザーが望むものではありません。
答え3
以下はエラーです... "ファイルシステムGBブロックの空き容量がIusedマウントされたIusedを使用してインストールされました。"
解決策は次のとおりです。
# df -g | grep Filesystem | sed 's/%//g'| awk '{print $5>=75}' | head -4