在AIX上设置命令输出的列宽

时间:2014-03-06 13:38:18

标签: java bash shell aix

我正在尝试在我的Java应用程序中解析df -Pg命令的输出,它将根据需要为我打印。

以下是命令的输出:

Filesystem    GB blocks      Used Available Capacity Mounted on
/dev/hd4           1.00      0.30      0.70      31% /
/dev/hd2           3.62      2.65      0.98      74% /usr
/dev/hd9var        2.00      0.19      1.81      10% /var
/dev/hd3           2.88      1.61      1.27      56% /tmp
/dev/hd1           2.00      1.30      0.70      66% /home
/proc                 -         -         -       -  /proc
/dev/hd10opt       1.00      0.27      0.73      28% /opt
/dev/fslv00        2.88      1.25      1.63      44% /tsmfiles
/dev/fslv01        2.00      0.84      1.16      43% /opt/IBM/ITM
/dev/livedump      0.25      0.00      0.25       1% /var/adm/ras/livedump
/dev/DoOnceAIX      0.75      0.00      0.75       1% /DoOnceAIX
/dev/nmonlv        1.00      0.03      0.97       4% /var/perf/poa
/dev/fslv02       49.50     42.86      6.64      87% /u01
/dev/fslv03      685.00    312.62    372.38      46% /u02
akslltsm:/depot     60.50     43.06     17.44      72% /mnt

我在java中的解析器使用间距大小分割此文本。当它读取行时,解析器在看到至少1个空格字符时拆分字符串。正如您所看到的,列中有一些行(如“GB blocks”和“Mounted on”)所以我无法按照自己的意愿进行拆分。

我想要的是设置列宽(2+空格字符)并让我的程序成功解析它。

1 个答案:

答案 0 :(得分:1)

抓住特殊情况并填写空格,调整列,然后撤消在第一步中所做的操作。

e.g。

step one: sed -e 's/GB Blocks/GB_Blocks/' -e 's/Mounted on/Mounted_on/'

second step: your normal program that adjusts the columns

third step: sed -e 's/GB_Blocks/GB Blocks/' -e 's/Mounted_on/Mounted on/'

然后将它们一起管道:

sed -e ... | <your prog> | sed -e ...

对于这种情况,这是一种相当普遍的技术。如果输入无法解析(使用当时需要的任何定义),则将输入改为工作,解析,然后反转第一个更改。