我正在尝试在我的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+空格字符)并让我的程序成功解析它。
答案 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 ...
对于这种情况,这是一种相当普遍的技术。如果输入无法解析(使用当时需要的任何定义),则将输入改为工作,解析,然后反转第一个更改。