我正在使用runmqsc命令获取如下输出。但我想要删除一些。我正在使用egrep和cut但没有得到所需的结果。
Runmqsc命令:echo“dis clusqmgr(*)suspend”| runmqsc QMGR1
原始输出:
1 : dis clusqmgr(*) suspend
AMQ8441: Display Cluster Queue Manager details.
CLUSQMGR(GWD1) CHANNEL(TO.GWD1.SSL)
CLUSTER(CLUSD) SUSPEND(NO)
AMQ8441: Display Cluster Queue Manager details.
CLUSQMGR(GWD2) CHANNEL(TO.GWD2.SSL)
CLUSTER(CLUSD) SUSPEND(NO)
期望的输出:
CLUSQMGR(GWD1) SUSPEND(NO)
CLUSQMGR(GWD2) SUSPEND(NO)
我用来实现这个目的:
echo "dis clusqmgr(*) suspend"|runmqsc QMGR1|egrep 'CLUSQMGR|SUSPEND'| tr ')' '\n' | grep "CLUSQMGR(" | cut -f 2 -d ")"
请帮忙。
答案 0 :(得分:1)
将输出传输到的一种方法:
egrep 'CLUSQMGR|SUSPEND' | paste - - | awk '{print $1, $4}'
例如,
egrep 'CLUSQMGR|SUSPEND' filename | paste - - | awk '{print $1, $4}'
其中filename
包含您发布的原始输入:
CLUSQMGR(GWD1) SUSPEND(NO)
CLUSQMGR(GWD2) SUSPEND(NO)
另一种方法是将命令输出传递给:
egrep -o '\b(CLUSQMGR|SUSPEND)\S+' | paste - -
答案 1 :(得分:0)
边界参数是什么?我假设任何带冒号的行都应该被忽略,并且任何CLUSQMGR行的第一个条目和任何SUSPEND行的最后一个条目都应该合并并打印。以下内容仅在两者都出现时才能正常工作,并且始终按此顺序排列:
runmqsc QMGR1 <<<'dis clusqmgr(*) suspend' |
awk '/:/ { g=""; next }
/CLUSQMGR/ { g=$1; next }
/SUSPEND/ { print g, $NF; g="" }'
这显然是临时的;一个正确的解决方案将涉及runmqsc
输出的真实解析器(谷歌搜索显示多次尝试,但我无法判断它们的质量)或runmqsc
版本打印正确的机器可读输出(例如JSON)。 / p>