Shell 特定字段上出现次数的格式化输出
如何将输出格式化为所需格式,如下所示:Shell 特定字段上出现次数的格式化输出,shell,unix,awk,Shell,Unix,Awk,如何将输出格式化为所需格式,如下所示: SUBPATH DANAME DMNAME GROUP STATE cciss/c0d0 cciss/c0d0 - - ENABLED sda xiv0_001b emc000 gicn
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.
...
xiv0\u 001b具有一组启用路径和一组禁用路径。
...
因为每个名称重复了几次(状态和磁盘名…)
最好使用awk
以避免使用grep
等进行多个分区。以下是一种方法:
$ 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
格式 不错。添加所有禁用的磁盘部分将是完美的。e、 g.$2
不在e
中,仅在d
@Kent yes中。如果OP需要,此逻辑可以在结束
块中轻松实现。