解決策が見つからないようで、狂っているようです。列を印刷するために使用できることを知っていますawk
。私のファイルシステムがソートされているため、特定の列を印刷するのに問題があります。
私が実行したときに起こったことは次のとおりですdf
。
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg_root-root
36623968 4484592 30278976 13% /
tmpfs 961312 0 961312 0% /dev/shm
/dev/sda1 516040 102896 386932 22% /boot
1Kブロック列を使用すると、awk
ファイルシステムの場所の長さによって他の列の値が返されます。デフォルトではこれが起こります。
1K-blocks
4484596
961312
516040
正しい列情報を一覧表示するにはどうすればよいですか?
答え1
df
パイプを通して入る場合は、awk
代わりにdf -P
パイプを使用してください。特に改行なしで簡単に解析できるように設計されています。ヘッダー行(NR >= 2
)をスキップすることを忘れないでください。
奇妙な改行で既存の出力を解析する必要がある場合は、空白で始まるので、連続した行がわかります。
awk '
NR==1 {next}
/^ / {print $1}
!/^ / {print $2}
'
ただし、ファイルシステム名にスペースが含まれているため、列ベースの解析が問題を引き起こす可能性があるいくつかのUNIXバリアントがあります。 、、、df -P
タブを使用しません)。
答え2
FS名はそれほど長くはありませんが、次のことを試すことができます。
df |grep "%" |grep -v Use |awk {'print $(NF-4)'}
これは、1Kブロックを持つヘッダー行が必要ないと仮定します。
答え3
df -Pk|tail -n +2|column -t | awk '{print $4}'
df -Pk
:ファイルシステムが一覧表示されます。tail -n +2
:タイトルが削除されます。column -t:
フォーマットされた出力の場合。awk '{print $4}'
:4番目の列の内容を印刷します。
答え4
GNUを使用すると、そのdf
フラグを使用し、他の回答で提案されているように-P
パイプすることができます。awk
簡単で明確な例:利用可能なキロバイト数()が必要な場合は、df -k
次のことが正しく機能します。
df -kP | awk 'NR>1 {print $4}'
これはawkに最初の列(つまりヘッダー行ではない)の後にすべての行の4番目の列を印刷するように指示します。
とにかくこの回答を追加する主な理由は、Solaris(Solaris 9および10で確認)の出力形式に似た改行があるにもかかわらず、このフラグが実際には必要ないということです。この場合、次の操作が実行されます。 :
df -k | awk 'NR>1 {print $4}'