2013-04-12 21 views
0

如何设置格式的输出作为遵循成所需的格式:与出现在特定字段数目格式化输出

SUBPATH      DANAME    DMNAME  GROUP  STATE 
cciss/c0d0     cciss/c0d0   -   -   ENABLED 
sda       xiv0_001b   emc000  gicn2db_PRD ENABLED 
sdb       xiv0_001b   emc000  gicn2db_PRD ENABLED 
sdd       xiv0_001b   emc000  gicn2db_PRD ENABLED 
sdc       xiv0_001b   emc000  gicn2db_PRD ENABLED 
sdx       xiv0_004f   0000   ddrr2db_PRD ENABLED 
sdad      xiv0_004f   0000   ddrr2db_PRD DISABLED 
sdaa      xiv0_004f   0000   ddrr2db_PRD ENABLED 
sdu       xiv0_004f   0000   ddrr2db_PRD ENABLED 
sdaj      xiv0_005d   0001   gconfdb_PRD DISABLED 
sdag      xiv0_005d   0001   gconfdb_PRD ENABLED 
sdah      xiv0_005d   0001   gconfdb_PRD ENABLED 
... 

例如我需要解析该块,并创建一个输出如下:

xiv0_001b has <total_amount> of ENABLED paths and <total_amount> of DISABLED paths. 
... 

因为每个名字被重复几次(状态和盘名...)

优选使用awk以避免多个parsings使用grep等ç...

回答

0

这里有一个方法:

$ awk 'NR>1{$5=="ENABLED"?e[$2]++:d[$2]++}END{for(i in e)printf "%s ENABLED %d DISABLED %d\n",i,e[i],d[i]}' file 
xiv0_005d ENABLED 2 DISABLED 1 
xiv0_004f ENABLED 3 DISABLED 1 
cciss/c0d0 ENABLED 1 DISABLED 0 
xiv0_001b ENABLED 4 DISABLED 0 

修改printf格式,因为你需要。

+0

不错的一个。添加所有磁盘禁用部分将是完美的。例如'$ 2'不在'e'中,只有'd' – Kent

+0

@Kent是如果OP需要,这个逻辑可以很容易地在'END'块中实现。 –