以下是文件
TMPQM>CSQN205I COUNT= 213, RETURN=00000000, REASON=00000000
CSQM401I ?TMPQM
QUEUE(Q1) TYPE(QLOCAL)
QSGDISP(QMGR) CURDEPTH(0)
CSQM401I ?TMPQM
QUEUE(Q2) TYPE(QLOCAL)
QSGDISP(QMGR) CURDEPTH(23)
CSQM401I ?TMPQM
QUEUE(Q3) TYPE(QLOCAL)
QSGDISP(QMGR) CURDEPTH(150)
CSQM401I ?TMPQM
我的目的是获得价值,
Q=Q1
V=0
Q=Q2
V=23
Q=Q3
V=150
答案 0 :(得分:0)
你能用bash吗?不是最有效的,但这是一个bash脚本:
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
count=1
for queue in `grep "QUEUE" input.txt`
do
# Strip the beginning up to (
q1="${queue#*(}"
# Strip the end from ) on
q2="${q1%%)*}"
q[$count]=$q2
count=$((count+1))
done
count=1
for value in `grep "CURDEPTH" input.txt`
do
# Strip the beginning up to (
v1="${value##*(}"
# Strip the end from ) on
v2="${v1%)*}"
v[$count]=$v2
count=$((count+1))
done
for index in 1 2 3
do
echo "Q=${q[$index]}"
echo "V=${v[$index]}"
done
IFS=$SAVEIFS
花哨的循环只是为了处理在bash中用空格循环的行。
答案 1 :(得分:0)
pcregrep和sed的组合将完成这项工作。 pcregrep支持使用-M选项的多行匹配
-bash-3.2$ pcregrep -M -o '^QUEUE[(](.+?)[)].*\n.*CURDEPTH[(](\d+?)[)]$' trial.txt | sed -e 's/^QUEUE(\([^)]\+\)).*$/Q=\1/g' -e 's/.*CURDEPTH(\([^)]\+\))/V=\1/g'
Q=Q1
V=0
Q=Q2
V=23
Q=Q3
V=150
答案 2 :(得分:0)
我的解决方案:
grep -oP '(?<=QUEUE|CURDEPTH)\S+' input.txt | tr -d '()' | (while read NAME && read VAL; do echo $NAME=$VAL; done)
它比@ cravoori的解决方案更灵活,因为您可以轻松地格式化输出。那条线的输出是......
Q1=0
Q2=23
Q3=150
...您可以source
然后使用$Q1
,$Q2
等直接阅读