2014-03-06 18 views
0

我試圖在我的Java應用程序中解析df -Pg命令的輸出,該應用程序將根據需要爲我打印。在AIX上設置命令輸出的列寬

下面是命令的輸出:

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解析器分裂這段文字與間距的大小。在讀取行時,當hee看到至少1個空格字符時,解析器會拆分字符串。正如你所看到的,列中有一些行(如「GB blocks」和「Mounted on」),所以我不能按照我的意願拆分。

我想要的是設置列寬(2+空格字符),並讓我的程序成功解析它。

+0

爲什麼不只是扔掉第一行? –

+0

好主意,但不是一個永久的解決方案。我打算每天打印很多像這樣的命令輸出。在某些情況下,我還需要第一行。 – AloneInTheDark

+0

@AloneInTheDark,跳過第一行。然後,生成您自己的標題行。 – sat

回答

1

抓住特殊情況並填充空格,調整列,然後撤消在第一步中所做的操作。

例如

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 ... 

這是這種類型的情況相當普遍的技術。如果輸入無法解析(使用當時需要的任何定義),則更改輸入以進行工作,解析輸入,然後逆轉第一個更改。