予期しない改行文字を持つawk固有の列

予期しない改行文字を持つawk固有の列

解決策が見つからないようで、狂っているようです。列を印刷するために使用できることを知っています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}'

関連情報