shell - 从 shell 中的两行中选择不同的值

标签 shell grep tr

我在运行

echo "dis clusqmgr(*) suspend"|runmqsc QMGR1

获得以下输出,但我想删除其中一些。我尝试使用 egrepcut 但无法获得所需的结果。

原始输出:

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 ")"

最佳答案

$ cat t.txt
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)

.

$ awk '/^CLUSQMGR/{clusqmgr=$1;t=1}t&&/^CLUSTER/{t=0;print clusqmgr, $2}' t.txt
CLUSQMGR(GWD1) SUSPEND(NO)
CLUSQMGR(GWD2) SUSPEND(NO)

所以

$ echo "dis clusqmgr(*) suspend" | runmqsc QMGR1 | awk '/^CLUSQMGR/{clusqmgr=$1;t=1}t&&/^CLUSTER/{t=0;print clusqmgr, $2}'

应该会产生您想要的结果。

关于shell - 从 shell 中的两行中选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23262075/

相关文章:

file - 使用 ftp 从远程机器下载文件的 shell 脚本

shell - 递归重命名文件 Mac OSX

macos - grep 不打印某些带有特殊字符的文件的结果文件名

linux - 如何知道哪个文件保存 grep 结果?

regex - 如何使用 grep 查找损坏的 NMEA 日志句子?

bash - 用 bash 中的空格替换\n(新行)

linux - if 中的多个条件

linux - 数据库备份 - 按表名拆分大文本文件

bash - 如何使用shell脚本从句子中删除停用词?

Linux 文件操作