免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: d_jacky
打印 上一主题 下一主题

请高手帮忙一个关于程序优化的问题 [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
11 [报告]
发表于 2010-02-20 22:59 |只看该作者
02357919393
02358227313
这两个是怎么来的,也没有redirnumber啊。

论坛徽章:
0
12 [报告]
发表于 2010-02-20 23:01 |只看该作者
本帖最后由 d_jacky 于 2010-02-20 23:05 编辑

回复 11# blackold


    如果记录没有redirnumber就输出callingNumber,
记录如下:
70 CDR GATEIN={                                          ----第一条记录开始
   RecordType=0(GATEIN)
   sequenceNumber=16878990
   callingNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=13896753726           本来要去这个值
   }
   calledNumber{
      AddInd=H'4
      NumPlan=H'1
      ISDN=18996826667
   }
   mscNumber{
      AddInd=H'1
      NumPlan=H'6
      ISDN=460030934044526100
   }
   incomingTKGP=1154
   outgoingTKGP=1041
   inTrunkGpModule=8
   outTrunkGpModule=0
   timeForSeizeChannel=2010-02-14 23:49:49
   timeForAnswer=2010-02-14 23:50:04
   timeForRelease=2010-02-14 23:51:20
   callDuration=76(seconds)
   partialOutputRecNum=0
   lastPartialOutput(The last CDR)
   callReference{
      Module=8
      SequenceNo=2568567
   }
   causeForTermination=0(Normal Release)
   diagnostics=H'0000
   chargedParty=0(Originator Charged)
   IsPulseChargeSup=0
   RedirNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=13896577522                  存在redirnumber,所以就取它
   }
}
--------------------------------------------------------------------------------   第一条记录结束
71 CDR GATEOUT={                   第二条记录开始
   RecordType=1(GATEOUT)
   sequenceNumber=16878991
   callingNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=02357919393                           取它就行
   }
   calledNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=13996415008
   }
   mscNumber{
      AddInd=H'1
      NumPlan=H'6
      ISDN=46003093402612100
   }
   incomingTKGP=1031
   outgoingTKGP=1158
   inTrunkGpModule=0
   outTrunkGpModule=12
   timeForSeizeChannel=2010-02-14 23:49:00
   timeForAnswer=2010-02-14 23:49:11
   timeForRelease=2010-02-14 23:51:20
   callDuration=129(seconds)
   partialOutputRecNum=0
   lastPartialOutput(The last CDR)
   callReference{
      Module=24
      SequenceNo=384981
   }
   causeForTermination=0(Normal Release)
   diagnostics=H'0102
   chargedParty=0(Originator Charged)
   IsPulseChargeSup=0
}
--------------------------------------------------------------------------------第二条记录结束
71 CDR GATEOUT={              第三条记录开始
   RecordType=1(GATEOUT)
   sequenceNumber=16878992
   callingNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=02358227313               取它就行
   }
   calledNumber{
      AddInd=H'2
      NumPlan=H'1
      ISDN=15111990850
   }
   mscNumber{
      AddInd=H'1
      NumPlan=H'6
      ISDN=46003093403426100
   }
   incomingTKGP=1031
   outgoingTKGP=1155
   inTrunkGpModule=0
   outTrunkGpModule=9
   timeForSeizeChannel=2010-02-14 23:50:12
   timeForAnswer=2010-02-14 23:50:26
   timeForRelease=2010-02-14 23:51:21
   callDuration=55(seconds)
   partialOutputRecNum=0
   lastPartialOutput(The last CDR)
   callReference{
      Module=27
      SequenceNo=385631
   }
   causeForTermination=0(Normal Release)
   diagnostics=H'0000
   chargedParty=0(Originator Charged)
   IsPulseChargeSup=0
}
--------------------------------------------------------------------------------第三条记录结束

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
13 [报告]
发表于 2010-02-20 23:18 |只看该作者
  1. awk -v RS='-+\n' '{if(/RedirNumber{/)sub(/.*RedirNumber{[^}]*ISDN=/,"");else sub(/.*callingNumber{[^}]*ISDN=/,"");sub(/\n.*/,"")}1' urfile
复制代码

论坛徽章:
0
14 [报告]
发表于 2010-02-21 07:52 |只看该作者
黑哥你写的我运行怎么报错啊~是不是我写的格式不对。您试过吗?

论坛徽章:
0
15 [报告]
发表于 2010-02-21 08:25 |只看该作者
回复 13# blackold


    能不能先判断到有“70 CDR GATEIN”或者“71 CDR GATEOUT”再取这个值啊,因为有些记录不是以这些开头的

论坛徽章:
0
16 [报告]
发表于 2010-02-21 08:47 |只看该作者
jack你运行黑哥的脚本报错吗

论坛徽章:
0
17 [报告]
发表于 2010-02-21 09:31 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
18 [报告]
发表于 2010-02-21 10:12 |只看该作者
  1. #!/bin/awk -f
  2.    BEGIN{FS="\n";
  3.          RS="-+\n";
  4.         }

  5.     {for(i=1;i<=NF;i++)
  6.         if($i~/callingNumber/){
  7.           split($(i+3),call_array,"=");
  8.           CALLING_ISDN=call_array[2];
  9.           call_flag=1;
  10.         }
  11.         else if($i~/RedirNumber/){
  12.           split($(i+3),redir_array,"=");
  13.           REDIR_ISDN=redir_array[2];
  14.           redir_flag=2;
  15.         }
  16.         
  17.      if(call_flag<redir_flag)
  18.         print REDIR_ISDN;
  19.      else
  20.         print CALLING_ISDN;
  21.       
  22.      call_flag=0;
  23.      redir_flag=0;
  24.     }
复制代码
有点正则表达式不明白
如果RS="^-+\n" 将不会有正确结果. 我的目的是将---------- 作为RS.

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
19 [报告]
发表于 2010-02-21 10:22 |只看该作者
回复 14# iori809


    测试过,我的环境没有问题。是什么错误?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
20 [报告]
发表于 2010-02-21 10:26 |只看该作者
回复 15# d_jacky


    在前面添加pattern就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP