You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历字符串并提取MQ队列指定字段的技术求助

从MQSC输出提取指定字段的脚本实现

以下是针对你提供的MQSC输出,提取QUEUE名称、CURDEPTH、CURFSIZE等字段的几种实用脚本方案:

原始MQSC输出

5724-H72 (C) Copyright IBM Corp. 1994, 2022. Starting MQSC for queue manager TESTQMGR. 1 : dis qs(SYSTEM.RETAINED.PUB.QUEUE) AMQ8450I: Display queue status details. QUEUE(SYSTEM.RETAINED.PUB.QUEUE) TYPE(QUEUE) CURDEPTH(56) CURFSIZE(1) CURMAXFS(2088960) IPPROCS(0) LGETDATE(2023-03-09) LGETTIME(09.44.40) LPUTDATE(2023-03-09) LPUTTIME(09.44.40) MEDIALOG( ) MONQ(MEDIUM) MSGAGE(3620167) OPPROCS(0) QTIME(1578, 1578)

方法1:使用awk(Shell脚本首选)

awk可直接解析键值对格式内容,精准提取指定字段:

# 假设输出内容存在文件mqsc_output.txt中,或通过管道传递内容
awk '{
    for (i=1; i<=NF; i++) {
        if ($i ~ /^QUEUE\(/ ) { sub(/QUEUE\(|)/,"",$i); print "QUEUE: " $i }
        if ($i ~ /^CURDEPTH\(/ ) { sub(/CURDEPTH\(|)/,"",$i); print "CURDEPTH: " $i }
        if ($i ~ /^CURFSIZE\(/ ) { sub(/CURFSIZE\(|)/,"",$i); print "CURFSIZE: " $i }
    }
}' mqsc_output.txt

执行后输出:

QUEUE: SYSTEM.RETAINED.PUB.QUEUE
CURDEPTH: 56
CURFSIZE: 1

方法2:使用grep+sed组合(轻量Shell方案)

通过grep匹配目标字段,再用sed去除格式符号:

# 单独提取每个字段
grep -o "QUEUE([^)]*)" mqsc_output.txt | sed 's/QUEUE(\(.*\))/\1/'
grep -o "CURDEPTH([^)]*)" mqsc_output.txt | sed 's/CURDEPTH(\(.*\))/\1/'
grep -o "CURFSIZE([^)]*)" mqsc_output.txt | sed 's/CURFSIZE(\(.*\))/\1/'

# 一次性输出所有字段
echo "QUEUE: $(grep -o "QUEUE([^)]*)" mqsc_output.txt | sed 's/QUEUE(\(.*\))/\1/')"
echo "CURDEPTH: $(grep -o "CURDEPTH([^)]*)" mqsc_output.txt | sed 's/CURDEPTH(\(.*\))/\1/')"
echo "CURFSIZE: $(grep -o "CURFSIZE([^)]*)" mqsc_output.txt | sed 's/CURFSIZE(\(.*\))/\1/')"

方法3:使用Python脚本(适合复杂场景)

若需将提取结果存入变量或做后续逻辑处理,Python正则表达式更灵活:

import re

mqsc_output = """5724-H72 (C) Copyright IBM Corp. 1994, 2022. Starting MQSC for queue manager TESTQMGR. 1 : dis qs(SYSTEM.RETAINED.PUB.QUEUE) AMQ8450I: Display queue status details. QUEUE(SYSTEM.RETAINED.PUB.QUEUE) TYPE(QUEUE) CURDEPTH(56) CURFSIZE(1) CURMAXFS(2088960) IPPROCS(0) LGETDATE(2023-03-09) LGETTIME(09.44.40) LPUTDATE(2023-03-09) LPUTTIME(09.44.40) MEDIALOG( ) MONQ(MEDIUM) MSGAGE(3620167) OPPROCS(0) QTIME(1578, 1578)"""

# 定义要提取的字段列表
target_fields = ["QUEUE", "CURDEPTH", "CURFSIZE"]
extracted_result = {}

for field in target_fields:
    match = re.search(rf"{field}\(([^)]+)\)", mqsc_output)
    if match:
        extracted_result[field] = match.group(1).strip()

# 打印提取结果
for key, value in extracted_result.items():
    print(f"{key}: {value}")

运行后输出:

QUEUE: SYSTEM.RETAINED.PUB.QUEUE
CURDEPTH: 56
CURFSIZE: 1

内容的提问来源于stack exchange,提问作者KhalDrogo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:17:36