df
コマンドは私に良い情報を与えてくれます、そして私はそれをKB単位で見るのが大好きです。しかし、数字は常に巨大になるため、3桁ごとに千単位の区切り文字(別名:コンマ)が必要です。
ex> df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 20157076 2982212 16970148 15% /
none 4 0 4 0% /sys/fs/cgroup
/dev/sda2 27206836656 27189604228 17113644 100% /volume1
iwant> df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 20,157,076 2,982,212 169,70,148 14.8% /
none 4 0 4 0% /sys/fs/cgroup
/dev/sda2 27,206,836,656 27,189,604,228 17,113,644 100% /volume1
-h
(人間が読める形式)オプションは、すべてが非論理的になるため、嫌いです。特に単位バイトは数値ごとに異なります。同じユニットにすべての番号が必要です。
必要なのは千単位の区切り文字だけです…df
を使用するときにオプションはありますか?
まだ解決策がないので、以下のようにsed
を使ってみました。
df | sed -r ':L;s=\b([0-9]+)([0-9]{3})\b=\1,\2=g;t L'
動作しますが、配置が悪いため、複数行の結果は良くありません。
しかし、悲しいことに、私はしばらくの間この行を使用する必要があります。
Awkを使用して数値を %'d
でフォーマットしてから、 column
を使用してテーブルをフォーマットできます。
$ df | LC_ALL=en_US.UTF-8 awk '{
if (NR == 1) { print gensub(/ +/, "\t", "g") }
else { printf("%s\t%'"'"'d\t%'"'"'d\t%'"'"'d\t%d\t%s\n", $1, $2, $3, $4, $5, $6) } }
' | column -t -R 2,3,4,5 -s$'\t'
Filesystem 1K-blocks Used Available Use% Mounted on
dev 1,002,104 0 1,002,104 0 /dev
run 1,011,880 1,060 1,010,820 1 /run
/dev/sda2 36,285,808 17,358,124 17,054,752 51 /
tmpfs 1,011,880 0 1,011,880 0 /dev/shm
tmpfs 1,011,880 0 1,011,880 0 /sys/fs/cgroup
tmpfs 1,011,880 8,300 1,003,580 1 /tmp
/dev/sda1 306,584 264 306,320 1 /boot/efi
tmpfs 202,376 28 202,348 1 /run/user/1000
/dev/sr0 58,122 58,122 0 100 /run/media/mypc/myfolder
ロケールをLC_ALL
で設定することにより、そこにある任意の1000形式に変更できます。数字を右揃えにしたくない場合、またはawkにそのオプションがない場合(Ubuntuのデフォルトのオプションのように)、-R
オプションを削除することもできます。
function gensub never defined
エラーが発生した場合は、 このバグ が原因です。これはgawkをインストールすることで解決できます。または、区切り文字をタブではなくスペースに変更します
KB値を取得する場合は、対応する列を分割する必要があります
df | LC_ALL=en_US.UTF-8 awk -v K=1024 '{
if (NR == 1) { print gensub(/ +/, "\t", "g") }
else { printf("%s\t%'"'"'d\t%'"'"'d\t%'"'"'d\t%d\t%s\n",
$1, $2/K, $3/K, $4/K, $5, $6) } }
' | column -t -R 2,3,4,5 -s$'\t'
浮動小数点値を取得したい場合は、%d
を%f
に変更するだけです。
df | LC_ALL=en_US.UTF-8 awk -v K=1024 '{
if (NR == 1) { print gensub(/ +/, "\t", "g") }
else { printf("%s\t%'"'"'0.2f\t%'"'"'0.2f\t%'"'"'0.2f\t%d\t%s\n",
$1, $2/K, $3/K, $4/K, $5, $6) } }
' | column -t -R 2,3,4,5 -s$'\t'
もちろん、awk
を必要とせずに、 printf "%-10d %10d\n", $1, $2
のようなフィールド幅オプションを使用してcolumn
から直接列を整列することもできますが、十分に予約する必要があります各列のスペース