linux – UNIX(AIX)脚本,仅使用awk或其他文件处理实用程序处理文件

我有一个任务是编写一个脚本来过滤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 
最佳答案
试试这个更简单的命令..

sed -n -e 's/.*QUEUE(\([^)]*\)).*/\1/p' -e 's/.*CURDEPTH(\([0-9]*\)).*/\1/p' \
   | paste -d ' ' - - \
   | grep -v ' 0$'

转载注明原文:linux – UNIX(AIX)脚本,仅使用awk或其他文件处理实用程序处理文件 - 代码日志