加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 01:05:55 所属栏目:Linux 来源:网络整理
导读:我有一个任务是编写一个脚本来过滤MQ runmqsc命令的输入并将输出重定向到另一个文件.我一直在努力使用许多其他 Linux命令管道,它似乎在 Linux中工作得很好,但我的经理需要在AIX系统上运行脚本,所以UNIX操作系统. 我意识到许多在Linux上运行良好或在Linux中完
我有一个任务是编写一个脚本来过滤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 ' trf' | 
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$'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读