【发布时间】:2017-06-07 14:48:57
【问题描述】:
我的任务是编写一个脚本,该脚本将过滤来自 MQ runmqsc 命令的输入并将输出重定向到另一个文件。我一直在使用许多其他通过管道传输的 Linux 命令,它似乎在 Linux 中工作得很好,但是我的经理需要在 AIX 系统上运行脚本,所以是 UNIX 操作系统。 我意识到许多在 Linux 上运行良好或在 Linux 中完成工作的命令将在 UNIX 或基于 UNIX 的系统上产生完全不同的输出。 runmqsc 命令的输出如下所示:
5724-H72 (C) Copyright IBM Corp. 1994, 2009. ALL RIGHTS RESERVED.
Starting MQSC for queue manager CNUMQ02B.
1 : DISPLAY QLOCAL(*) CURDEPTH
AMQ8409: Display Queue details.
QUEUE(ADEXA.AOM.REPLY.MR.QL) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: Display Queue details.
QUEUE(ADEXA.AOM.REPLY.QL) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: Display Queue details.
QUEUE(ADEXA.ERROR.QL) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: Display Queue details.
QUEUE(ADEXA.FACT.OUT.QL) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: Display Queue details.
QUEUE(ADW.REMAN.XREF.ERR.QL) TYPE(QLOCAL)
CURDEPTH(14)
AMQ8409: Display Queue details.
QUEUE(SAPNA.MESS.CRITICAL.CLASS.RESUME.QL)
TYPE(QLOCAL) CURDEPTH(123)
One MQSC command read.
No commands have a syntax error.
All valid MQSC commands were processed.
我基本上只需要在同一行显示队列名称、空格和队列深度,文件开头或结尾没有尾随空格和换行符,这样它将类似于以空格作为分隔符的 csv 文件。我还需要过滤掉队列深度等于 0 的队列,所以输出将如下所示:
ADW.REMAN.XREF.ERR.QL 14
正如我所说,我在 Linux 上尝试了许多命令,但我不知道哪些命令和标志实际上在 UNIX 和 Linux 上的工作方式或多或少相同,我的经理今天想要这个,所以如果你有任何机会阅读此内容,我要求您至少指导我使用什么来尝试解决问题:) 谢谢。
这是我在 Linux 中写的:
head -n -3 "$1" |
tail -n +6 |
sed '/AMQ8409: Display Queue details./d' |
sed 's/TYPE(QLOCAL)//g' |
tr -d ' \t\r\f' |
awk 'NR%2{printf "%s ",$0;next;}1' |
sed '/CURDEPTH(0)/d' |
awk '{gsub(/QUEUE(/, ""); gsub(/CURDEPTH(/, ""); gsub(/)/, ""); print}' |
sort -nk2
【问题讨论】:
-
是的,我做到了,无论我尝试什么,在 AIX 上的效果都完全不同,我现在只能使用在线 UNIX 解释器来尝试解决它,因为我的经理正在一些 AIX Enterprise 系统上测试它们我也没有访问权限,但这是我写的:head -n -3 "$1" |尾-n +6 | sed '/AMQ8409: 显示队列详情./d' | sed 's/TYPE(QLOCAL)//g' | tr -d ' \t\r\f' | awk 'NR%2{printf "%s",$0;next;}1' | sed '/CURDEPTH(0)/d' | awk '{gsub(/QUEUE(/, ""); gsub(/CURDEPTH(/, ""); gsub(/)/, ""); print}' | sort -nk2
-
感谢您的尝试,但您能否将其作为问题的一部分进行更新?
-
你有哪个
awk版本?是GNU Awk吗?可以打印awk --version并粘贴吗? -
我无法获得 awk 版本,因为我必须在其上运行命令的服务器是我无法访问的企业服务器,所以当我的经理将到达。我感谢每个提供意见的人,现在我需要自己做一些测试,看看哪个适用于 AIX,之后将为工作解决方案提供支持。非常感谢!
-
我想我预见到的问题是,您已经在另一台机器(基于
GNU的系统)上进行了一系列尝试,这导致我们所有人都提供了基于GNU Awk的解决方案。几乎所有人都可能无法(不确定,只是一个想法)在Awk下工作AIX