Preciso exibir cada fila do IBM MQ Queue Manager junto com sua profundidade.
Posso fazer isso com um comando como echo DISPLAY QLOCAL(QE*) WHERE(CURDEPTH GE 0) | runmqsc QMNAME
. A saída é similar a esta:
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.
Observe que algumas filas têm nomes grandes e a saída move os campos "
TYPE
" e "CURDEPTH
" para baixo e para a direita.
Meu objetivo é exibir essas filas como [TYPE] - [QUEUE.NAME] - [DEPTH]
:
QLOCAL - QE.QUEUE.NAME.QUEUE.NAME.QUEUE.NAME3 - 1
Então, estou tentando usar um sed
ou outro awk
para fazer isso, e estas são algumas das minhas tentativas:
Comawk
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)
O principal problema é que a saída não exibe a profundidade da fila corretamente quando seu nome é grande.
Comsed
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
não mostra nada quando adiciono a \s+CURDEPTH
expressão. Somente quando a removo é que mostra as filas, mas então perco o valor de profundidade.
Vocês podem me dar algumas recomendações sobre isso?