从shell中的输出中的两行中选择不同的值
我使用runmqsc命令获得如下输出。但我想去掉一些。我正在使用egrep和cut,但没有得到所需的结果 Runmqsc命令:echo“dis clusqmgr(*)suspend”| Runmqsc QMGR1 原始输出:从shell中的输出中的两行中选择不同的值,shell,grep,tr,Shell,Grep,Tr,我使用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) CLU
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 ")"
请提供帮助。将输出传输到以下位置的一种方法:
egrep 'CLUSQMGR|SUSPEND' | paste - - | awk '{print $1, $4}'
egrep -o '\b(CLUSQMGR|SUSPEND)\S+' | paste - -
比如说,
egrep 'CLUSQMGR|SUSPEND' filename | paste - - | awk '{print $1, $4}'
其中filename
包含您发布的原始输入,您将生成:
CLUSQMGR(GWD1) SUSPEND(NO)
CLUSQMGR(GWD2) SUSPEND(NO)
另一种方法是通过管道将命令输出传输到:
egrep 'CLUSQMGR|SUSPEND' | paste - - | awk '{print $1, $4}'
egrep -o '\b(CLUSQMGR|SUSPEND)\S+' | paste - -
边界参数是什么?我假设任何带有冒号的行都应该被忽略,任何CLUSQMGR行的第一个条目和任何挂起行的最后一个条目都应该合并并打印。以下内容只有在同时出现时才能正常工作,并且始终按此顺序出现:
runmqsc QMGR1 <<<'dis clusqmgr(*) suspend' |
awk '/:/ { g=""; next }
/CLUSQMGR/ { g=$1; next }
/SUSPEND/ { print g, $NF; g="" }'
runmqsc QMGR1