有一段日志,需要提取括号中的一些值,组成新文件.
spawn runmqsc dcllf.mqm
display queue('q_*') curdepth
end
5724-H72 (C) Copyright IBM Corp. 1994, 2005. ALL RIGHTS RESERVED.
启动队列管理器 dcllf.mqm 的 MQSC。
1 : display queue('q_*') curdepth
AMQ8409: 显示队列细节。
QUEUE(q_act_shell_act) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_act_shell_control) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_act_shell_module) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mms_mo_log) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mms_mt_act_1) TYPE(QLOCAL)
CURDEPTH(11)
AMQ8409: 显示队列细节。
QUEUE(q_mms_mt_act_2) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mms_mt_act_3) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mms_mt_batch_1) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mms_mt_log) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mms_report) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mo_act) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mo_old_mms) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mo_old_sms) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mo_route) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mo_tp) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mo_tp_provision) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_mt_tp_msgid) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_performance_test) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_sms_mo_log) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_sms_mt_act_1) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_sms_mt_act_2) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_sms_mt_act_3) TYPE(QLOCAL)
CURDEPTH(0)
AMQ8409: 显示队列细节。
QUEUE(q_sms_mt_log) TYPE(QLOCAL)
CURDEPTH(6)
AMQ8409: 显示队列细节。
QUEUE(q_sms_report) TYPE(QLOCAL)
CURDEPTH(51)
2 : end
读取一个 MQSC 命令。
所有命令均无语法错误。
已处理所有的有效 MQSC 命令。
有人提供了这样一种办法

我觉得不优雅,应该有更好的办法,于是想到用正则. 主要涉及反向引用,非贪婪模式和多行匹配模式.
#!/usr/bin/env python3
import re
data = open('mqwatch.txt', 'r').read()
b = re.findall('QUEUE\((.*?)\).*?CURDEPTH\((\d+)\)', data, re.S)
x = ';'.join(['%s,%s' % (i[0], i[1]) for i in b])
print(x)

