xmlstarlet 在每个 <JOB> 标签迭代中根据其他属性的值选择一个属性的值

如何解决xmlstarlet 在每个 <JOB> 标签迭代中根据其他属性的值选择一个属性的值

在我的代码中使用以下命令提取参数 FTP-RHOST 时,我无法提取它并且脚本为变量分配了空白值,以下两行是我正在构建的较大脚本的一部分基于另一个输入 XML 的 XML :

xmlstarlet sel -t -v '//JOB['"$i"']/AUTOEDIT2[@NAME='FTP-RHOST']/@VALUE' ~testhwa/FTPJobstable007.xml >> /tmp/FTRSERVER

FTRSERVER=`cat /tmp/FTRSERVER`

输入 XML(由 和 的多个标签组成):

<JOB
     ACTIVE_TILL="20141124" 
     APPLICATION="CTDS0320" 
     APPL_FORM="AFT" 
     APPL_TYPE="FILE_TRANS" 
     APPL_VER="6.1.01" 
     APR="1" 
     AUG="1" 
     AUTHOR="wyy" 
     AUTOARCH="0" 
     CHANGE_DATE="20190403" 
     CHANGE_TIME="141554" 
     CHANGE_USERID="ecsadmin" 
     CM_VER="610" 
     CONFIRM="0" 
     CREATION_DATE="20190328" 
     CREATION_TIME="105555" 
     CREATION_USER="singhm7" 
     CRITICAL="0" 
     CYCLIC="0" 
     CYCLIC_TOLERANCE="0" 
     CYCLIC_TYPE="Interval" 
     DAYS_AND_OR="OR" 
     DEC="1" 
     DESCRIPTION="Processes Source data files FTP from Source System" 
     DOCLIB="/prod/appl/ctds/Doc" 
     DOCMEM="energent_billing_delta.doc" 
     FEB="1" 
     GROUP="@CTDS-BW" 
     IND_CYCLIC="START" 
     INTERVAL="00000M" 
     JAN="1" 
     JOBNAME="energent_billing_delta-FTP" 
     JUL="1" 
     JUN="1" 
     MAR="1" 
     MAXDAYS="0" 
     MAXRERUN="0" 
     MAXRUNS="0" 
     MAXWAIT="7" 
     MAY="1" 
     MEMLIB="Not in use for application jobs" 
     MEMNAME="energent_billing_delta-FTP" 
     MULTY_AGENT="N" 
     NODEID="vprv0320" 
     NOV="1" 
     OCT="1" 
     OWNER="ctds_energent" 
     PARENT_TABLE="@CTDS" 
     PRIORITY="AA" 
     RETRO="0" 
     RULE_BASED_CALENDAR_RELATIONSHIP="OR" 
     SEP="1" 
     SHIFT="IGNOREJOB" 
     SHIFTNUM="+00" 
     SYSDB="0" 
     TASKTYPE="Job" 
     USE_INSTREAM_JCL="N" 
     WEEKSCAL="BCD-Y">
      <INCOND AND_OR="AND" NAME="CTDS0320-ENERGENT-BILLING-DELTA-OK" ODATE="ODAT"/>
      <OUTCOND NAME="CTDS0320-ENERGENT-BILLING-DELTA-FTP" ODATE="ODAT" SIGN="ADD"/>
      <AUTOEDIT2 NAME="%%FTP-ACCOUNT" VALUE="ctds_energent"/>
      <AUTOEDIT2 NAME="%%FTP-LOSTYPE" VALUE="Unix"/>
      <AUTOEDIT2 NAME="%%FTP-LUSER" VALUE="ctds"/>
      <AUTOEDIT2 NAME="%%FTP-ROSTYPE" VALUE="Windows"/>
      <AUTOEDIT2 NAME="%%FTP-RUSER" VALUE="controlm@enbridge.com"/>
      <AUTOEDIT2 NAME="%%FTP-LPATH1" VALUE="/prod/appl/ctds/Publish/ENERGENT/*"/>
      <AUTOEDIT2 NAME="%%FTP-RPATH1" VALUE="/\Business Intelligence-Gas Consumption\Energent\Outgoing\Gas Consumption\"/>
      <AUTOEDIT2 NAME="%%FTP-PATH" VALUE="Not in use for application jobs"/>
      <AUTOEDIT2 NAME="%%FTP-USE_DEF_NUMRETRIES" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-RPF" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-CLEAR_ALL" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-CONNTYPE2" VALUE="FTP"/>
      <AUTOEDIT2 NAME="%%FTP-CONNTYPE1" VALUE="LOCAL"/>
      <AUTOEDIT2 NAME="%%FTP-LHOST" VALUE="Local"/>
      <AUTOEDIT2 NAME="%%FTP-RHOST" VALUE="hdq-nt164"/>
      <AUTOEDIT2 NAME="%%FTP-LPASSIVE" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-RPASSIVE" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-UPLOAD1" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-UPLOAD2" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-UPLOAD3" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-UPLOAD4" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-UPLOAD5" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TRANSFER_NUM" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TYPE1" VALUE="A"/>
      <AUTOEDIT2 NAME="%%FTP-TYPE2" VALUE="I"/>
      <AUTOEDIT2 NAME="%%FTP-TYPE3" VALUE="I"/>
      <AUTOEDIT2 NAME="%%FTP-TYPE4" VALUE="I"/>
      <AUTOEDIT2 NAME="%%FTP-TYPE5" VALUE="I"/>
      <AUTOEDIT2 NAME="%%FTP-MINSIZE1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-MINSIZE2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-MINSIZE3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-MINSIZE4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-MINSIZE5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TIMELIMIT1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TIMELIMIT2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TIMELIMIT3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TIMELIMIT4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TIMELIMIT5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-UNIQUE1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-IF_EXIST1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-IF_EXIST2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-IF_EXIST3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-IF_EXIST4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-IF_EXIST5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-SRCOPT1" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-SRCOPT2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-SRCOPT3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-SRCOPT4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-SRCOPT5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-DSTOPT1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-DSTOPT2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-DSTOPT3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-DSTOPT4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-DSTOPT5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-ABSTIME1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-ABSTIME2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-ABSTIME3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-ABSTIME4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-ABSTIME5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TRIM1" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TRIM2" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TRIM3" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TRIM4" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TRIM5" VALUE="1"/>
    </JOB>
    <JOB
    ACTIVE_TILL="20141124" 
     APPLICATION="CTDS-VPRV0342" 
     APPL_FORM="AFT" 
     APPL_TYPE="FILE_TRANS" 
     APPL_VER="6.1.01" 
     APR="1" 
     AUG="1" 
     AUTHOR="wyy" 
     AUTOARCH="0" 
     CHANGE_DATE="20190716" 
     CHANGE_TIME="233201" 
     CHANGE_USERID="pahwar" 
     CM_VER="610" 
     CONFIRM="0" 
     CREATION_DATE="20190611" 
     CREATION_TIME="072632" 
     CREATION_USER="pahwar" 
     CRITICAL="0" 
     CYCLIC="0" 
     CYCLIC_TOLERANCE="0" 
     CYCLIC_TYPE="Interval" 
     DAYS_AND_OR="OR" 
     DEC="1" 
     DESCRIPTION="Processes Source data files FTP from Source System" 
     DOCLIB="/prod/appl/ctds/Doc/" 
     DOCMEM="energent_billing_delta.doc" 
     FEB="1" 
     GROUP="@CTDS-BW" 
     IND_CYCLIC="START" 
     INTERVAL="00000M" 
     JAN="1" 
     JOBNAME="energent_billing_delta-FTP" 
     JUL="1" 
     JUN="1" 
     MAR="1" 
     MAXDAYS="0" 
     MAXRERUN="0" 
     MAXRUNS="0" 
     MAXWAIT="7" 
     MAY="1" 
     MEMLIB="Not in use for application jobs" 
     MEMNAME="energent_billing_delta-FTP" 
     MULTY_AGENT="N" 
     NODEID="vprv0342" 
     NOV="1" 
     OCT="1" 
     OWNER="ctds_energent" 
     PARENT_TABLE="@CTDS-VPRV0342" 
     PRIORITY="AA" 
     RETRO="0" 
     RULE_BASED_CALENDAR_RELATIONSHIP="OR" 
     SEP="1" 
     SHIFT="IGNOREJOB" 
     SHIFTNUM="+00" 
     SYSDB="0" 
     TASKTYPE="Job" 
     USE_INSTREAM_JCL="N" 
     WEEKSCAL="BCD-Y">
      <INCOND AND_OR="AND" NAME="V0342-ENERGENT-BILLING-DELTA-OK" ODATE="ODAT"/>
      <OUTCOND NAME="V0342-ENERGENT-BILLING-DELTA-FTP" ODATE="ODAT" SIGN="ADD"/>
      <AUTOEDIT2 NAME="%%FTP-ACCOUNT" VALUE="ctds_energent"/>
      <AUTOEDIT2 NAME="%%FTP-LOSTYPE" VALUE="Unix"/>
      <AUTOEDIT2 NAME="%%FTP-LUSER" VALUE="ctds"/>
      <AUTOEDIT2 NAME="%%FTP-ROSTYPE" VALUE="Windows"/>
      <AUTOEDIT2 NAME="%%FTP-RUSER" VALUE="controlm@enbridge.com"/>
      <AUTOEDIT2 NAME="%%FTP-LPATH1" VALUE="/prod/appl/ctds/Publish/ENERGENT/*"/>
      <AUTOEDIT2 NAME="%%FTP-RPATH1" VALUE="/\Business Intelligence-Gas Consumption\Energent\Outgoing\Gas Consumption\"/>
      <AUTOEDIT2 NAME="%%FTP-PATH" VALUE="Not in use for application jobs"/>
      <AUTOEDIT2 NAME="%%FTP-USE_DEF_NUMRETRIES" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-RPF" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-CLEAR_ALL" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-CONNTYPE2" VALUE="FTP"/>
      <AUTOEDIT2 NAME="%%FTP-CONNTYPE1" VALUE="LOCAL"/>
      <AUTOEDIT2 NAME="%%FTP-LHOST" VALUE="Local"/>
      <AUTOEDIT2 NAME="%%FTP-RHOST" VALUE="hdq-nt164"/>
      <AUTOEDIT2 NAME="%%FTP-LPASSIVE" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-RPASSIVE" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-UPLOAD1" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-UPLOAD2" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-UPLOAD3" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-UPLOAD4" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-UPLOAD5" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TRANSFER_NUM" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TYPE1" VALUE="A"/>
      <AUTOEDIT2 NAME="%%FTP-TYPE2" VALUE="I"/>
      <AUTOEDIT2 NAME="%%FTP-TYPE3" VALUE="I"/>
      <AUTOEDIT2 NAME="%%FTP-TYPE4" VALUE="I"/>
      <AUTOEDIT2 NAME="%%FTP-TYPE5" VALUE="I"/>
      <AUTOEDIT2 NAME="%%FTP-MINSIZE1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-MINSIZE2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-MINSIZE3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-MINSIZE4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-MINSIZE5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TIMELIMIT1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TIMELIMIT2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TIMELIMIT3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TIMELIMIT4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TIMELIMIT5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-UNIQUE1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-IF_EXIST1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-IF_EXIST2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-IF_EXIST3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-IF_EXIST4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-IF_EXIST5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-SRCOPT1" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-SRCOPT2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-SRCOPT3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-SRCOPT4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-SRCOPT5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-DSTOPT1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-DSTOPT2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-DSTOPT3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-DSTOPT4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-DSTOPT5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-ABSTIME1" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-ABSTIME2" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-ABSTIME3" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-ABSTIME4" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-ABSTIME5" VALUE="0"/>
      <AUTOEDIT2 NAME="%%FTP-TRIM1" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TRIM2" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TRIM3" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TRIM4" VALUE="1"/>
      <AUTOEDIT2 NAME="%%FTP-TRIM5" VALUE="1"/>
    </JOB>
    <JOB

问候, 斯里拉姆.V

解决方法

名称实际上是“%%FTP-RHOST”而不是“FTP-RHOST”。这也需要进入双引号而不是单引号,所以:

xmlstarlet sel -t -v '//JOB['"$i"']/AUTOEDIT2[@NAME="%%FTP-RHOST"]/@VALUE' ~testhwa/FTPJobstable007.xml >> /tmp/FTRSERVER
,
xmlstarlet sel -t -m '//JOB/AUTOEDIT2[@NAME="%%FTP-RHOST"]' -v './@VALUE' -n ~testhwa/table-vpc-lx-004.xml >> /tmp/FTRSERVER

这很完美。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?