免费注册 查看新帖 |

Chinaunix

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

文件处理,不会,听说perl处理可以。求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-27 21:32 |只看该作者 |倒序浏览
各位大神,我目前在做一个系统,要求把文件入库,但提供给我们的文件很不规则,如果规则的话入库很容易。但是给的文件很乱。如下:
May  7 00:00:00 192.168.2.201 ha_web_s1a2: WAP_GATEWAY_ID=XZ-WAPGW         BEARER_TYPE=2         USER_MSISDN=+8618091019685         Pesu_ID=         SP_Name=         UserType=         IMEI=         UserAgent=Mozilla/5.0 (HW-HUAWEI_C8500/C8500V100R001C92B234;U;Android/2.1;240*320;CTC/2.0) AppleWebKit/530.17 Mobile Safari/530.17         NatLocalIP=192.168.2.201         NatLocalPort=41764         UAProf=http://wap1.huawei.com/uaprof/HW_C8500_1_20100127.xml         NAS_IP_Address=115.168.90.99         Client_IP_Address=10.169.42.18         URL=http://shm.z.qq.com/phone2.0/vaction.jsp?sid=ARaAU8udVQQ38WXlMnyET4v-&ac=131&buid=919755317&pid=1         PULL_Method=1         Destination_Address=180.153.3.178         Destination_Port=80         Operation_Type=3         Incoming_Request_TIME=1336320009704         Outgoing_Request_TIME=1336320009715         Incoming_Response_TIME=1336320010011         Outgoing_Response_TIME=1336320010011         CDR_STATUS=00         Uplink_CONTENT_LENGTH=0         

==============================================================================================
上面是其提供的文件。我想通过perl对其进行处理成很规则的文件。比如:
May  7 00:00:00 192.168.2.201 ha_web_s1a2: |XZ-WAPGW|2|+8618091019685|||||Mozilla/5.0 (HW-HUAWEI_C8500/C8500V100R001C92B234;U;Android/2.1;240*320;CTC/2.0) AppleWebKit/530.17 Mobile Safari/530.17|192.168.2.201|41764|http://wap1.huawei.com/uaprof/HW_C8500_1_20100127.xml|115.168.90.99  等等这种很规则的,请问,我需要如何写,如何处理。具体的文件请见附件。

eg.zip

1.41 KB, 下载次数: 7

论坛徽章:
0
2 [报告]
发表于 2012-06-27 21:52 |只看该作者
试试吧
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. open(my $fh,"<","eg.txt") or die($!);
  5. while (<$fh>) {
  6.         chomp;
  7.         my @fields = split;
  8.         print join(q{ },@fields[0..4])," ";
  9.         print join(q{|},map { /.*=(.*)/? $1 : $_ } @fields[5..$#fields] ),"\n";
  10. }
  11. close($fh);
复制代码

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
3 [报告]
发表于 2012-06-27 22:09 |只看该作者
本帖最后由 cdtits 于 2012-06-27 22:10 编辑
  1. #!/usr/bin/env perl

  2. while (<DATA>) {
  3.     s/\s+\w*?=/\|/g;
  4.     print;
  5. }

  6. __DATA__
  7. May 7 00:00:00 192.168.2.201 ha_web_s1a2: WAP_GATEWAY_ID=XZ-WAPGW BEARER_TYPE=2 USER_MSISDN=+8618091019685 Pesu_ID= SP_Name= UserType= IMEI= UserAgent=Mozilla/5.0 (HW-HUAWEI_C8500/C8500V100R001C92B234;U;Android/2.1;240*320;CTC/2.0) AppleWebKit/530.17 Mobile Safari/530.17 NatLocalIP=192.168.2.201 NatLocalPort=41764 UAProf=http://wap1.huawei.com/uaprof/HW_C8500_1_20100127.xml NAS_IP_Address=115.168.90.99 Client_IP_Address=10.169.42.18 URL=http://shm.z.qq.com/phone2.0/vaction.jsp?sid=ARaAU8udVQQ38WXlMnyET4v-&ac=131&buid=919755317&pid=1 PULL_Method=1 Destination_Address=180.153.3.178 Destination_Port=80 Operation_Type=3 Incoming_Request_TIME=1336320009704 Outgoing_Request_TIME=1336320009715 Incoming_Response_TIME=1336320010011 Outgoing_Response_TIME=1336320010011 CDR_STATUS=00 Uplink_CONTENT_LENGTH=0
复制代码

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
4 [报告]
发表于 2012-06-27 22:26 |只看该作者
本帖最后由 cdtits 于 2012-06-27 22:30 编辑
  1. #!/usr/bin/env perl

  2. $^I = '.bak';

  3. while (<>) {
  4.     s/\s+\w*?=/\|/g;
  5.     print;
  6. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-06-27 22:43 |只看该作者
kk861123 发表于 2012-06-27 21:52
试试吧


谢谢你哈。我再问一下,如果我想把输出的记录写到一个新的文件中,该如何写。
我还没有入门呢,请多多包涵

论坛徽章:
0
6 [报告]
发表于 2012-06-27 23:05 |只看该作者
管道重定向 应该可以   lianxi.pl  > resualt.txt

论坛徽章:
0
7 [报告]
发表于 2012-06-28 10:11 |只看该作者
貌似不行样,和shell不一样
回复 6# xiyoulaoyuanjia


   

论坛徽章:
0
8 [报告]
发表于 2012-06-28 10:56 |只看该作者
  1. ./lianxi.pl > 1.txt
  2. cat 1.txt
  3. May 7 00:00:00 192.168.2.201 ha_web_s1a2:|XZ-WAPGW|2|+8618091019685|||||Mozilla/5.0 (HW-HUAWEI_C8500/C8500V100R001C92B234;U;Android/2.1;240*320;CTC/2.0) AppleWebKit/530.17 Mobile Safari/530.17|192.168.2.201|41764|http://wap1.huawei.com/uaprof/HW_C8500_1_20100127.xml|115.168.90.99|10.169.42.18|http://shm.z.qq.com/phone2.0/vaction.jsp?sid=ARaAU8udVQQ38WXlMnyET4v-&ac=131&buid=919755317&pid=1|1|180.153.3.178|80|3|1336320009704|1336320009715|1336320010011|1336320010011|00|0
复制代码

论坛徽章:
0
9 [报告]
发表于 2012-06-28 11:04 |只看该作者
上面是在命令行上重定向的,在代码中可以重定项标准输出!
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;

  4. open STDOUT,">1.txt" or die "open stdout error!";
  5. while (<DATA>) {
  6.     s/\s+\w*?=/\|/g;
  7.     print;
  8. }
复制代码

论坛徽章:
0
10 [报告]
发表于 2012-06-28 21:53 |只看该作者
谢谢大家,这个问题已经处理了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP