我需要显示每个 IBM MQ 队列管理器队列及其深度。
我可以使用类似 的命令来执行此操作echo DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) | runmqsc QMNAME
。输出类似于以下内容:
5724-H72 (C) Copyright IBM Corp. 1994, 2023.
Starting MQSC for queue manager QMNAME.
1 : DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0)
AMQ8409I: Display Queue details.
QUEUE(QE.QUEUE.NAME1) TYPE(QLOCAL)
CURDEPTH(2)
AMQ8409I: Display Queue details.
QUEUE(QE.QUEUE.NAME2) TYPE(QLOCAL)
CURDEPTH(90)
AMQ8409I: Display Queue details.
QUEUE(QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3)
TYPE(QLOCAL) CURDEPTH(1)
AMQ8409I: Display Queue details.
QUEUE(QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME4)
TYPE(QLOCAL) CURDEPTH(0)
AMQ8409I: Display Queue details.
QUEUE(QE.QUEUE.NAME5) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409I: Display Queue details.
QUEUE(QE.QUEUE.NAME.QUEUE.NAME6)
TYPE(QLOCAL) CURDEPTH(0)
AMQ8409I: Display Queue details.
QUEUE(QE.QUEUE.NAME7) TYPE(QLOCAL)
CURDEPTH(0)
One MQSC command read.
No commands have a syntax error.
All valid MQSC commands were processed.
请注意,有些队列的名称较大,输出会将“
TYPE
”和“CURDEPTH
”字段向右下方移动。
我的目标是将这些队列显示为[TYPE] - [QUEUE.NAME] - [DEPTH]
:
QLOCAL - QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3 - 1
因此,我尝试使用sed
或awk
来实现这一点,以下是我的一些尝试:
和awk
awk -F'(QUEUE|TYPE|CURDEPTH)' '/QUEUE\(.*\)/{printf "%s - %s - ", $2, $3}/CURDEPTH/{printf "%s\n", $2}'
$ echo DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) | runmqsc QMNAME | cat teste | awk -F'(QUEUE|TYPE|CURDEPTH)' '/QUEUE\(.*\)/{printf "%s - %s - ", $2, $3}/CURDEPTH/{printf "%s\n", $2}'
GE 0)
(QE.QUEUE.NAME1) - (QLOCAL) - (0)
(QE.QUEUE.NAME2) - (QLOCAL) - (0)
(QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3) - - (QLOCAL)
(QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME4) - - (QLOCAL)
(QE.QUEUE.NAME5) - (QLOCAL) - (0)
(QE.QUEUE.NAME.QUEUE.NAME6) - - (QLOCAL)
(QE.QUEUE.NAME7) - (QLOCAL) - (0)
主要问题是当队列名称很大时,输出无法正确显示队列深度。
和sed
sed -rn 's|QUEUE\((.*)\)\s+TYPE\((.*)\)\s+CURDEPTH\((\d+)\)|\2 - \1 - \3|p'
$ echo DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) | runmqsc QMNAME | sed -rn 's|QUEUE\((.*)\)\s+TYPE\((.*)\)\s+CURDEPTH\((\d+)\)|\2 - \1 - \3|p'
$ echo DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) | runmqsc QMNAME | sed -rn 's|QUEUE\((.*)\)\s+TYPE\((.*)\)|\2 - \1|p'
QLOCAL - QUEUE.NAME1
QLOCAL - QUEUE.NAME2
QLOCAL - QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3
QLOCAL - QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME4
QLOCAL - QE.QUEUE.NAME5
QLOCAL - QE.QUEUE.NAME.QUEUE.NAME6
QLOCAL - QE.QUEUE.NAME7
sed
当我添加\s+CURDEPTH
表达式时什么都不显示。只有当我删除它时它才会显示队列,但随后我丢失了深度值。
你们能就此给我一些建议吗?