有一段日志,需要提取括号中的一些值,组成新文件.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 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 命令。 |
有人提供了这样一种办法
我觉得不优雅,应该有更好的办法,于是想到用正则. 主要涉及反向引用,非贪婪模式和多行匹配模式.
1 2 3 4 5 6 7 | #!/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) |