我正在使用Runtime.getRuntime()。exec(“df”)获取我的分区的空间详细信息。
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdb12 41022792 4219168 34713128 11% /
udev 8103980 4 8103976 1% /dev
tmpfs 3245332 924 3244408 1% /run
none 5120 0 5120 0% /run/lock
none 8113328 160 8113168 1% /run/shm
/dev/sdb2 262144 28584 233560 11% /boot/efi
如何使用正则表达式或UNIX命令将输出仅作为第2列,第3列和第4列 - 按以下方式更改标题 - 可用内存,已用内存和总内存完全按此顺序排列。
所以期望的输出是:
Available Used Total
34713128 4219168 41022792
8103976 4 8103980
3244408 924 3245332
...
谢谢!
答案 0 :(得分:2)
以下相当长的字符串可以满足您的要求:
df | awk 'BEGIN {print " Available Used Total";} {if (NR>1) printf("%12d%12d%12d\n", $4, $3, $2);}'
说明:
| awk take the output of the df command as input to awk
BEGIN do this first: print headers. Note the use of spaces to align things
if (NR > 1) skip "record 1" = do not do anything with the headers
printf() do formatted printing
%12d print integer in fixed width of 12 characters (maintains alignment
我机器上的结果:
Available Used Total
71644456 551306776 623463232
0 372 372
0 0 0
0 0 0
407510704 377391216 784901920
618400760 549288520 1167689280
没有磁盘名称就没有用,但这就是你要问的......
答案 1 :(得分:0)
您可以使用awk
执行此操作:
df | awk '{print ""$4" "$3" "$2""}'
答案 2 :(得分:0)
对我而言,这是有效的
df | perl -pe \
's!^(?:\S+\s+){2}(\S+)\s+(\S+).*!"$1\t$2\t" . ($1 eq "Used" ? "Total" : $1 + $2)!e'
这并不好:它发现列是由空格分隔的非空格,这有点脆弱。它根据列名将最后一列计算为总和或“总计”。相当脆弱,我会说。