免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2080 | 回复: 7
打印 上一主题 下一主题

[文本处理] awk处理xml文件的http://bbs.chinaunix.net/问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-03-06 14:49 |只看该作者 |倒序浏览
本帖最后由 某某7呀 于 2019-03-07 16:39 编辑

xml文件a.xml,但是格式不规范,<managedObject></managedObject>   <managedObject .../> 两种格式 有的里面没有子元素

1、如何同时模糊匹配到<managedObject .../>


求教诸位大神,以下是实现<managedObject></managedObject> 段落的分割,如何同时分割<managedObject .../>
cat a.xml |awk 'BEGIN{key=1} /<managedObject/,/<\managedObject>/ {print $0>"key"key".txt"} /<\managedObject>/ {++key}'



a.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE raml SYSTEM 'raml20.dtd'>
<raml version="2.0" xmlns="raml20.xsd">
  <cmData type="actual">
    <header>
      <log dateTime="2019-02-27T17:28:38" action="created" appInfo="ActualExporter">InternalValues are used</log>
    </header>
    <managedObject class="MRBTS" version="SBTS17A_1707_001" distName="PLMN-PLMN/MRBTS-804874" id="2048554">
      <p name="name">WZWL20</p>
      <p name="btsName">WZW0020</p>
    </managedObject>
    <managedObject class="MRBTS" version="SBTS17A_1707_001" distName="PLMN-PLMN/MRBTS-804875" id="2056406">
      <p name="name">WZWL129</p>
      <p name="btsName">WZW0129</p>
    </managedObject>
    <managedObject class="MRBTS" version="SBTS17A_1707_001" distName="PLMN-PLMN/MRBTS-804876" id="1910785">
      <p name="name">WZWL147</p>
      <p name="btsName">WZW0147</p>
    </managedObject>
    <managedObject class="MRBTS" version="SBTS17A_1707_001" distName="PLMN-PLMN/MRBTS-804877" id="2013739">
      <p name="name">WZWL156</p>
      <p name="btsName">WZW156</p>
    </managedObject>
    <managedObject class="MRBTS" version="SBTS17A_1707_001" distName="PLMN-PLMN/MRBTS-804878" id="1927471">
      <p name="name">WZWL165</p>
      <p name="btsName">WZW0165</p>
    </managedObject>
    <managedObject class="MRBTS" version="SBTS17A_1707_001" distName="PLMN-PLMN/MRBTS-805108" id="2013712">
      <p name="name">WZWL293</p>
      <p name="btsName">WZW293</p>
    </managedObject>
    <managedObject class="VLANIF" version="SBTS16.10" distName="PLMN-PLMN/SBTS-944649/TNL-1/ETHSVC-1/ETHIF-1/VLANIF-1" id="1018535">
      <p name="vlanId">3002</p>
    </managedObject>
    <managedObject class="VLANIF" version="SBTS16.10" distName="PLMN-PLMN/SBTS-944649/TNL-1/ETHSVC-1/ETHIF-1/VLANIF-2" id="1018536">
      <p name="vlanId">902</p>
    </managedObject>
    <managedObject class="VLANIF" version="SBTS16.10" distName="PLMN-PLMN/SBTS-944649/TNL-1/ETHSVC-1/ETHIF-1/VLANIF-3" id="1018537">
      <p name="vlanId">2000</p>
    </managedObject>
    <managedObject class="EQM" version="EQM17A_1708_008" distName="PLMN-PLMN/MRBTS-804874/EQM-1" id="2093977"/>
    <managedObject class="TNLSVC" version="TNL17A_1708_008" distName="PLMN-PLMN/MRBTS-804875/TNLSVC-1" id="2093000"/>
    <managedObject class="EQM_R" version="EQMR17A_1708_008" distName="PLMN-PLMN/MRBTS-804876/EQM_R-1" id="2092995"/>
  </cmData>
</raml>

这里想实现------将xml文件分割成若干小文件,以distname区分  这里要实现根据distname输出到不同文件 比如PLMN-PLMN/MRBTS-804874 以及 PLMN-PLMN/MRBTS-804874/EQM-1这样的输出到一个文件类似如下效果
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE raml SYSTEM 'raml20.dtd'>
<raml version="2.0" xmlns="raml20.xsd">
  <cmData type="actual">
    <header>
      <log dateTime="2019-02-27T17:28:38" action="created" appInfo="ActualExporter">InternalValues are used</log>
    </header>
    <managedObject class="MRBTS" version="SBTS17A_1707_001" distName="PLMN-PLMN/MRBTS-804874" id="2048554">
      <p name="name">WZWL20</p>
      <p name="btsName">WZW0020</p>
    </managedObject>
    <managedObject class="EQM" version="EQM17A_1708_008" distName="PLMN-PLMN/MRBTS-804874/EQM-1" id="2093977"/>
  </cmData>
</raml>


论坛徽章:
0
2 [报告]
发表于 2019-03-06 19:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2019-03-06 19:35 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2019-03-06 20:18 |只看该作者
回复 3# 本友会机友会摄友会

我想实现<managedObject>...</managedObject>   以及<managedObject .../> 分割<managedObject...   开头一直到</managedObject>或者 .../>结尾 获取中间的所有字符串。




论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
5 [报告]
发表于 2019-03-07 03:05 |只看该作者
#.: cat x0 | awk 'BEGIN{key=1} /<?xml version=/,/MRBTS-804875/ {if ($0!~/MRBTS-804875/)print $0;next}$0~/MRBTS-804874|cm|raml/{print $0}'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE raml SYSTEM 'raml20.dtd'>
<raml version="2.0" xmlns="raml20.xsd">
   <cmData type="actual">
     <header>
       <log dateTime="2019-02-27T17:28:38" action="created" appInfo="ActualExporter">InternalValues are used</log>
     </header>
     <managedObject class="MRBTS" version="SBTS17A_1707_001" distName="PLMN-PLMN/MRBTS-804874" id="2048554">
       <p name="name">WZWL20</p>
       <p name="btsName">WZW0020</p>
     </managedObject>
     <managedObject class="EQM" version="EQM17A_1708_008" distName="PLMN-PLMN/MRBTS-804874/EQM-1" id="2093977"/>
   </cmData>
</raml>

论坛徽章:
0
6 [报告]
发表于 2019-03-07 14:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2019-03-07 16:41 |只看该作者
回复 6# 本友会机友会摄友会
这里要实现根据distname输出到不同文件 比如PLMN-PLMN/MRBTS-804874 以及 PLMN-PLMN/MRBTS-804874/EQM-1这样的输出到一个文件这里有很多distname   所以要生成很多小文件


论坛徽章:
0
8 [报告]
发表于 2019-03-08 14:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP