我有以下使用 awk 的函数:
getStageMode() {
targ=$1; shift
mode=$(awk '
/[<]app-deployment/{a=1}
a && /[<]name[>]'"${targ}[<]"'/{n=1}
a && n && /[<]staging-mode[>]/{
sub(/[<]staging-mode[>]/,"", $0)
sub(/[<]\/staging-mode[>]/,"",$0)
print $0
exit
}
{print "n=" n }
' "${@}")
echo $mode
}
将 n 标志设置为 1 后,我无法重置它。重置它的正确位置在哪里?
最佳答案
/[<]\/app-deployment/{a=0; n=0}
所以,你会:
getStageMode() {
targ=$1; shift
mode=$(awk '
/[<]\/app-deployment/{a=0; n=0}
/[<]app-deployment/{a=1}
a && /[<]name[>]'"${targ}[<]"'/{n=1}
a && n && /[<]staging-mode[>]/{
sub(/[<]staging-mode[>]/,"", $0)
sub(/[<]\/staging-mode[>]/,"",$0)
print $0
exit
}
{print "n=" n }
' "${@}")
echo $mode
}
解释: OP 有一个带有 XML 节点的生成文件,例如:
<app-deployment>
<name>gr2</name>
<target>AdminServer</target>
<module-type>ear</module-type>
<source-path>/u01/app/wls1035_homes/wls1035_9999/grc864</source-path>
<security-dd-model>DDOnly</security-dd-model>
<staging-mode>nostage</staging-mode>
</app-deployment>
<app-deployment>
<name>gr3</name>
<target>AdminServer</target>
<module-type>ear</module-type>
<source-path>/u01/app/wls1035_homes/wls1035_9999/grc864</source-path>
<security-dd-model>DDOnly</security-dd-model>
</app-deployment>
当我们在 app-deployment
XML 节点中时,AWK 脚本设置 a
,当该节点具有 时设置
我们正在寻找。由于一些节点没有 n
namestaging-mode
,原始 AWK,它既没有重置 a
也没有 n
,可以返回 以下节点的暂存模式
。在退出节点时重置这些变量应该可以解决该问题。
关于linux - 在 awk 中重置标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9403904/