Chinaunix

标题: 问一个关于提取字段的问题 [打印本页]

作者: d_jacky    时间: 2010-02-11 18:17
标题: 问一个关于提取字段的问题
原始文件如下:
70 CDR GATEIN={
   RecordType=0(GATEIN)
   sequenceNumber=8926309
   callingNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=13896551373
   }
   calledNumber{
      AddInd=H'4
      NumPlan=H'1
      ISDN=15310118256
   }
   mscNumber{
      AddInd=H'1
      NumPlan=H'6
      ISDN=460030934026100
   }
   incomingTKGP=1153
   outgoingTKGP=1041
   inTrunkGpModule=7
   outTrunkGpModule=0
   timeForSeizeChannel=2010-02-11 13:58:59
   timeForAnswer=2010-02-11 13:59:05
   timeForRelease=2010-02-11 13:59:59
   callDuration=54(seconds)
   partialOutputRecNum=0
   lastPartialOutput(The last CDR)
   callReference{
      Module=7
      SequenceNo=1409514
   }
   causeForTermination=0(Normal Release)
   diagnostics=H'0102
   chargedParty=0(Originator Charged)
   IsPulseChargeSup=0
}
--------------------------------------------------------------------------------
71 CDR GATEOUT={
   RecordType=1(GATEOUT)
   sequenceNumber=8926310
   callingNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=13340393562
   }
   calledNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=1502359285111
   }
   mscNumber{
      AddInd=H'1
      NumPlan=H'6
      ISDN=460039340261002222
   }
   incomingTKGP=1041
   outgoingTKGP=1153
   inTrunkGpModule=0
   outTrunkGpModule=7
   timeForSeizeChannel=2010-02-11 13:58:54
   timeForAnswer=2010-02-11 13:59:09
   timeForRelease=2010-02-11 13:59:59
   callDuration=50(seconds)
   partialOutputRecNum=0
   lastPartialOutput(The last CDR)
   callReference{
      Module=22
      SequenceNo=214829
   }
   causeForTermination=0(Normal Release)
   diagnostics=H'0102
   chargedParty=0(Originator Charged)
   IsPulseChargeSup=0
}
--------------------------------------------------------------------------------
71 CDR GATEOUT={
   RecordType=1(GATEOUT)
   sequenceNumber=8926498
   callingNumber{
      AddInd=H'1
      NumPlan=H'1
      ISDN=008613114001808111
   }
   calledNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=138963421113331
   }
   mscNumber{
      AddInd=H'1
      NumPlan=H'6
      ISDN=460030934111026100
   }
   incomingTKGP=1041
   outgoingTKGP=1164
   inTrunkGpModule=0
   outTrunkGpModule=14
   timeForSeizeChannel=2010-02-11 13:59:02
   timeForAnswer=2010-02-11 13:59:23
   timeForRelease=2010-02-11 14:00:03
   callDuration=40(seconds)
   partialOutputRecNum=0
   lastPartialOutput(The last CDR)
   callReference{
      Module=23
      SequenceNo=213924
   }
   causeForTermination=0(Normal Release)
   diagnostics=H'0000
   chargedParty=0(Originator Charged)
   IsPulseChargeSup=0
   RedirNumber{
      AddInd=H'1
      NumPlan=H'1
      ISDN=8613370789688
   }
}
--------------------------------------------------------------------------------
如何提取CDR GATEOUT里面的callingNumber,谢谢,
作者: d_jacky    时间: 2010-02-11 18:32
请各位帮忙一下,有点急,谢谢了
作者: 709101040516    时间: 2010-02-11 18:36
本帖最后由 709101040516 于 2010-02-11 18:38 编辑
  1. awk '/callingNumber\{/,/calledNumber\{/{print}' URFILE|grep -v 'calledNumber{'
复制代码

作者: 709101040516    时间: 2010-02-11 18:37
回复 2# d_jacky


    弄好了,这么急啊!
作者: d_jacky    时间: 2010-02-11 18:41
这个好像不行哦,我要求的是
71 CDR GATEOUT={
   RecordType=1(GATEOUT)
   sequenceNumber=8926310
   callingNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=13340393562
   }
   calledNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=1502359285111
   }
   mscNumber{
      AddInd=H'1
      NumPlan=H'6
      ISDN=460039340261002222
   }
   incomingTKGP=1041
   outgoingTKGP=1153
   inTrunkGpModule=0
   outTrunkGpModule=7
   timeForSeizeChannel=2010-02-11 13:58:54
   timeForAnswer=2010-02-11 13:59:09
   timeForRelease=2010-02-11 13:59:59
   callDuration=50(seconds)
   partialOutputRecNum=0
   lastPartialOutput(The last CDR)
   callReference{
      Module=22
      SequenceNo=214829
   }
   causeForTermination=0(Normal Release)
   diagnostics=H'0102
   chargedParty=0(Originator Charged)
   IsPulseChargeSup=0
}
里面的callingNumber,你的会不会把所有的callingNumber都取出来了
作者: 709101040516    时间: 2010-02-11 18:48
  1. [18:09:19 pana ~ 3.2]#awk '/callingNumber\{/,/calledNumber\{/{print}' 33|grep -v 'calledNumber{'
  2.    callingNumber{
  3.       AddInd=H'2
  4.       NumPlan=H'1
  5.       ISDN=13896551373
  6.    }
  7.    callingNumber{
  8.       AddInd=H'2
  9.       NumPlan=H'1
  10.       ISDN=13340393562
  11.    }
  12.    callingNumber{
  13.       AddInd=H'1
  14.       NumPlan=H'1
  15.       ISDN=008613114001808111
  16.    }
复制代码
这样不对吗??你不是要这样的结果吗?
作者: 709101040516    时间: 2010-02-11 18:49
你直接说清楚你想要的结果
作者: d_jacky    时间: 2010-02-11 18:52
是这个:
calledNumber{
      AddInd=H'4
      NumPlan=H'1
      ISDN=15310118256
   }
是71 CDR GATEOUT={}大结构里面的calledNumber
作者: 709101040516    时间: 2010-02-11 18:59
你这里面有2个 71 CDR
作者: 709101040516    时间: 2010-02-11 19:02
本帖最后由 709101040516 于 2010-02-11 19:11 编辑

暂时写了个很傻逼的
  1. awk '/71\ CDR\ GATEOUT=\{/,/mscNumber\{/{print}' 33| awk '/calledNumber\{/,/mscNumber\{/{print}'|grep -v 'mscNumber{'
复制代码

作者: 709101040516    时间: 2010-02-11 19:14
还有一个
  1. grep '71 CDR GATEOUT={' -A 13 URFILE|grep 'mscNumber{' -B 5
复制代码

作者: ywlscpl    时间: 2010-02-11 19:19
  1. awk -F '\n' -v RS='----+\n' '$1~/CDR GATEOUT/{for (i=1;i<=NF;i++){if (T&&$i~/}/) {print $i;T=0}if ($i~/callingNumber/) T=1;if (T) print $i}}' file
复制代码

作者: ywlscpl    时间: 2010-02-11 19:24
怎么到了8楼又变需求了
作者: 709101040516    时间: 2010-02-11 19:30
回复 13# ywlscpl


    你才知道啊,客户需求变化快!
作者: 709101040516    时间: 2010-02-11 19:31
本帖最后由 709101040516 于 2010-02-11 20:04 编辑

回复 13# ywlscpl


    问个问题,awk '{for(NR==1,NR==3)print}' FILE, 有错误,是,错了吗?
估计就没有这种写法。。。
作者: 709101040516    时间: 2010-02-11 19:55
本帖最后由 709101040516 于 2010-02-11 20:05 编辑

回复 13# ywlscpl


    不拉布拉不拉布拉
作者: iori809    时间: 2010-02-11 20:30
sed -n '/calledNumber{/,/\}/p'  file
作者: 709101040516    时间: 2010-02-12 08:02
回复 17# iori809


    你完全没理解楼主的意思。。
作者: iori809    时间: 2010-02-12 08:04
回复 18# 709101040516


    呵呵~我发完以后也觉得是不是太简单了~ 不过LZ的需求老是改变啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2