`

记录一下处理xml的脚本

阅读更多

这个脚本还只是测试用的,完全没有考虑效率等问题,只是能实现功能而已。

需求:

把68.xml文件中的号码信息处理成两行,每行一个号码信息

 

源文件 68.xml:

 

 

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<Result xmlns="http://schemas.ericsson.com/pg/hlr/13.5/">
<Request>
<command>HEMSCMP:MSISDNALL</command>
<starttime>2012-10-16 15:10:10</starttime>
<jobid>68</jobid>
</Request>
<CAMELSubscriptionData>

<CAMELSubscription>
<msisdn>8613*****8561</msisdn>
<CamelTriggeringDetectionPointData>
<tdptype>OCTDP</tdptype>
<tdp>2</tdp>
<sk>91</sk>
<gsa>8613749296</gsa>
<deh>0</deh>
<cch>2</cch>
</CamelTriggeringDetectionPointData>
<CamelTriggeringDetectionPointData>
<tdptype>TCTDP</tdptype>
<tdp>12</tdp>
<sk>91</sk>
<gsa>8613749296</gsa>
<deh>0</deh>
<i>false</i>
<cch>2</cch>
</CamelTriggeringDetectionPointData>
</CAMELSubscription>
<CAMELSubscription>
<msisdn>8613*****8560</msisdn>
<CamelTriggeringDetectionPointData>
<tdptype>OCTDP</tdptype>
<tdp>2</tdp>
<sk>91</sk>
<gsa>8613749296</gsa>
<deh>0</deh>
<cch>2</cch>
</CamelTriggeringDetectionPointData>
<CamelTriggeringDetectionPointData>
<tdptype>TCTDP</tdptype>
<tdp>12</tdp>
<sk>91</sk>
<gsa>8613749296</gsa>
<deh>0</deh>
<i>false</i>
<cch>2</cch>
</CamelTriggeringDetectionPointData>
</CAMELSubscription>
</CAMELSubscriptionData>
</Result>

  处理脚本 for.sh:

#!/bin/bash
#把源文件68.xml中用<>关键字</>标注出来的行改成<>+空格+关键字+空格+</>
cat 68.xml | sed 's/>/> /'  |sed 's/<\// <\//'  

if [ -f re.txt ]; then
  rm re.txt #re.txt用来保存最终处理结果
  rm re.txt.int #re.txt.init用来保存中间结果
else
  echo "re.txt not exist"
fi

#因为需求要根据号码来处理数据,所以把号码所在的行号保存到文本中,以此作为循环的依据

sed -n "/<msisdn>/=" 68.xml >number.txt

#把每个号码所在的行号读取到数组array1中
array1=($(awk '{print $1}' number.txt))

#循环,开始遍历68.xml
for((i=0;i<${#array1[@]};i++))
  do
     #每遍历一个号码都清空re.txt.ini
     cat /dev/null > re.txt.ini 
     #注意:在sed中可以使用参数
     msisdn1=`sed -n "${array1[i]}p" 68.xml |awk '{print $2}'`
     echo $msisdn1 >>re.txt.ini
     #确定子循环的起点、终点
     let "beginnum=${array1[i]}+2"
     let "endnum=${array1[i]}+16"

    #把起点和终点间的行,用sed ,awk保存到数组array2中
     array2=($(sed -n "${beginnum}","${endnum}p" 68.xml |awk '{print $2}'))
     for ((j=0;j<${#array2[@]};j++))
        do
            echo ${array2[j]} >>re.txt.ini
        done
     #现在保存到re.txt.init中的数据是按列存放的,需要改成按行存放
     #sed 's/OCTDP//' ,是用空格替换字符OCTDP,注意这里一定要用printf,要是用print,结果会出现:
     #%s %s 2 %s 91 %s 8613749296 %s 0 %s 2 %s %s 12 %s 91 %s 8613749296 %s 0 %s false %s 2
     echo -e `awk '{printf "%s ",$1}' re.txt.ini |sed 's/OCTDP//' |sed 's/TCTDP//'` >> re.txt
    done
    

 

 

分享到:
评论

相关推荐

    XML学习指南pdf

    8.3.2 使用单记录数据绑定 8.3.3 其他数据绑定技术 8.3.4 把数据绑定与DTD一起使用 8.3.5 绑定HTML元素到XML属性 8.4 把脚本与DSO一起使用 第9章 使用文档对象模式脚本显示 XML文档 9.1 把XML文档链接到HTML...

    经典SQL脚本大全

    │ │ 6.1.2 多表联结导致记录重复的示例.sql │ │ 6.1.3 使用UNION实现库存报表的示例.sql │ │ 6.1.5 按指定上下限区间进行数据统计的示例.sql │ │ 6.1.6 随机出题的示例.sql │ │ 6.2.1 ROLLUP实现的分级...

    XML学习指南

    8.3.2 使用单记录数据绑定 8.3.3 其他数据绑定技术 8.3.4 把数据绑定与DTD一起使用 8.3.5 绑定HTML元素到XML属性 8.4 把脚本与DSO一起使用 第9章 使用文档对象模式脚本显示 XML文档 9.1 把XML文档链接到HTML页 9.2 ...

    程序设计:xml学习指南中文版

    绑定HTML元素到XML元素 8.3.1 使用表格数据绑定 8.3.2 使用单记录数据绑定 8.3.3 其他数据绑定技术 8.3.4 把数据绑定与DTD一起使用 8.3.5 绑定HTML元素到XML属性 8.4 把脚本与DSO一起使用 ...

    精通JS脚本之ExtJS框架.part2.rar

    2.1.6 历史记录对象 2.2 基本事件处理 2.3 2级DOM事件模型 2.3.1 事件传播 2.3.2 注册事件处理程序 2.3.3 event对象 2.4 常用事件 2.4.1 键盘事件 2.4.2 鼠标事件 2.4.3 页面事件 第3章 开始使用ExtJS ...

    OCRProcessing:处理藏文OCR的Python脚本

    ##################### OCRProcessing 脚本######################### #### 作者:Than Grove 日期:2013 年 2 月 8 日这些是我正在创建的脚本,用于处理 Zach 制作的 NGB 藏文扫描的 OCR XML 输出。 OCR 输出是一个...

    Sqlserver2000经典脚本

    第06章 │ │ 6.1.1 NULL对IN的查询的影响及解决示例.sql │ │ 6.1.2 各种联接的使用示例.sql │ │ 6.1.2 多表联结导致记录重复的示例.sql │ │ 6.1.3 使用UNION实现库存报表的示例.sql │ ...

    splitHmdbXml:分割HMDB Metabolite数据XML文件

    拆分HMDB所有代谢物XML乔治·L·马龙先生2021年4月21日概述该存储库记录了用于拆分和存储 XML的脚本和要求。 这些操作是使用Ruby编程语言完成的。 这些操作依赖于某些经过编码的数据,例如初始XML声明以及文档的打开...

    精通JS脚本之ExtJS框架.part1.rar

    2.1.6 历史记录对象 2.2 基本事件处理 2.3 2级DOM事件模型 2.3.1 事件传播 2.3.2 注册事件处理程序 2.3.3 event对象 2.4 常用事件 2.4.1 键盘事件 2.4.2 鼠标事件 2.4.3 页面事件 第3章 开始使用ExtJS ...

    xmljava系统源码-jstarcraft-tutorial:一套涵盖核心编程,人工智能,数字图像处理,自然语言处理,推荐与搜索,云服务领域

    一套涵盖核心编程,人工智能,数字图像处理,自然语言处理,推荐与搜索,云服务领域的Java框架. JStarCraft Core 目标是提供一个通用的Java核心编程框架,作为搭建其它框架或者项目的基础. 让相关领域的研发人员能够专注...

    毕业设计,基于Java+MySql开发的商城购物系统,包括PC端和安卓Anroid手机APP,内含Java完整源代码,数据库脚本

    服务器和客户端数据通信格式: XML格式(用于传输查询的记录集)和json格式(用于传输单个的对象信息) 类似滴滴打车模式,通过消费者与商家的地址位置信息,快速有效地解决用户的购买需求,快捷有效地处理用户的购买...

    毕业设计,基于Java+MySql开发的洗衣店预约系统,包括PC端和安卓Anroid手机APP,含Java完整源代码,数据库脚本

    服务器和客户端数据通信格式: XML格式(用于传输查询的记录集)和json格式(用于传输单个的对象信息) 1 目标 Android洗衣店预约APP目标是解决当前人们忙于工作没有时间处理换洗的衣物以及有些用户的衣物材质较为特殊...

    ActionScript开发人员指南中文版

    用于处理XML的EX方法 XML对象 XMLList对象 初始化XML变量 组合和变换XML对象 遍历XML结构 使用XML命名空间 XML类型转换 读取外部XML文档 在ActionScript中使用XML的示例:从Internet加载RSS数据 第章:使用本机JSON...

    snac_eac_cpf_utils:XSLT脚本,Perl脚本和数据文件以创建EAC CPF(公司团体,个人,家庭)

    还有一些Perl脚本,当要处理的输入记录数将超过计算机的内存时,主要使用它们。 在整个文档中,我们使用通用用户ID“ mst3k”作为您的用户ID。 版权所有2013弗吉尼亚大学。 根据教育社区许可版本2.0(“许可”)...

    智慧消防车管理系统(物联网项目源码+数据库脚本)

    系统还可以记录车辆的维修历史和维护记录。 数据分析与报表:系统可以对消防车辆的运行数据进行统计和分析,生成报表和图表,帮助管理人员了解车队的使用情况和效率,从而做出优化和改进措施。 数据安全与权限控制...

    ASP3《高级编程》(第一部分)

    11.2.1 存储为XML形式的ADO记录集 354 11.2.2 ADO记录集名称空间 355 11.2.3 ADO记录集模式 355 11.2.4 IE数据岛和绑定 358 11.2.5 以XML数据格式保存记录集 361 11.2.6 打开记录集 365 11.3 用XSL来设计XML ...

    ASP3《高级编程》(第二部分)

    11.2.1 存储为XML形式的ADO记录集 354 11.2.2 ADO记录集名称空间 355 11.2.3 ADO记录集模式 355 11.2.4 IE数据岛和绑定 358 11.2.5 以XML数据格式保存记录集 361 11.2.6 打开记录集 365 11.3 用XSL来设计XML ...

    学生选课信息管理系统(jsp+servlet+mysql)

    jsp写的学生选课信息管理系统,附带写好的毕业论文,可用于毕业设计。(SP(全称JavaServer Pages)...JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求)

    【最新版】DbSchema_macos_8_2_9.tgz【亲测可用】最好的可视化图表设计器和 GUI工具

    使用友好的GUI工具编辑,记录和浏览复杂的数据库。 使用布局简化数据库设计。 通过关注数据库架构的特定部分,可以更好地理解复杂的数据库。 使用我们直观的UI,可以很容易地为复杂模式创建数据库设计。 该界面使...

    PHP3程序设计

    第17章 用PHP处理XML 269 17.1 得到电影信息 269 17.1.1 与XML分析器协作 270 17.1.2 从XML到PHP 273 17.2 总结 276 附录A Internet资源 277 附录B ASCII表 282 附录C SQL语言参考 288 附录D PHP函数清单 307 附录E ...

Global site tag (gtag.js) - Google Analytics