免费注册 查看新帖 |

Chinaunix

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

帮忙看看这个问题怎么办啊 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-29 09:23 |只看该作者 |倒序浏览
现在有各TEXT,需要括号内的时间分裂出来怎么办啊,如下表
aa        time        hh        kk        ll
262310        1284943062 (2010-09-19 12:37:42)        1284943061 (2010-09-19 12:37:41)        946728000 (2000-01-01 00:00:00)        1198194710 (cc)
264735        1284942984 (2010-09-19 12:36:24)        1284942965 (2010-09-19 12:36:05)        1284942967 (2010-09-19 12:36:07)        0 (bb)
267177        1284943004 (2010-09-19 12:36:44)        1284942990 (2010-09-19 12:36:30)        1284942991 (2010-09-19 12:36:31)        1198194710 (aa)


需要把上面这个表变成下面这各表,怎么实现啊 这只是其中几列,还有好多这种列都要变呢

aa        time        hh        kk        ll
262310        2010-9-19 12:37        2010-9-19 12:37        2000-1-1 0:00        1198194710
264735        2010-9-19 12:36        2010-9-19 12:36        2010-9-19 12:36        0
267177        2010-9-19 12:36        2010-9-19 12:36        2010-9-19 12:36        1198194710

论坛徽章:
0
2 [报告]
发表于 2010-09-29 09:45 |只看该作者


  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. while (<DATA>) {
  5.     next if /^\s*$/;

  6.     print if /^\D/;

  7.     if (/^(\d+).+?\(([\d\-]+)\s(\d{1,2}:\d{1,2}).+?\(([\d\-]+)\s(\d{1,2}:\d{1,2}).+?\(([\d\-]+)\s(\d{1,2}:\d{1,2}):\d+\)\s+(\d+)/) {
  8.         print join("\t", ($1, $2, $3, $4, $5, $6, $7, $8)), "\n";
  9.     }
  10. }

  11. exit 0;


  12. __DATA__
  13. aa        time        hh        kk        ll
  14. 262310        1284943062 (2010-09-19 12:37:42)        1284943061 (2010-09-19 12:37:41)        946728000 (2000-01-01 00:00:00)        1198194710 (cc)
  15. 264735        1284942984 (2010-09-19 12:36:24)        1284942965 (2010-09-19 12:36:05)        1284942967 (2010-09-19 12:36:07)        0 (bb)
  16. 267177        1284943004 (2010-09-19 12:36:44)        1284942990 (2010-09-19 12:36:30)        1284942991 (2010-09-19 12:36:31)        1198194710 (aa)
复制代码

论坛徽章:
0
3 [报告]
发表于 2010-09-29 09:47 |只看该作者
楼上多谢,要是处理文本文件怎么写啊有很多行

论坛徽章:
0
4 [报告]
发表于 2010-09-29 10:05 |只看该作者
本帖最后由 珞水的大叔 于 2010-09-29 10:29 编辑

perl -pe 's/\s\d+\s\((\d[^)]+):\d\d\)/ $1/g;s/\s\([^)]*\)$//g' 文件名

试试这个

求职 : 技术支持/维
论坛徽章:
0
5 [报告]
发表于 2010-09-29 10:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2010-09-29 10:14 |只看该作者
回复 5# 99超人


    就是让他看一下先,呵呵,免得改了源文件
   重定向一下就可以了

求职 : 技术支持/维
论坛徽章:
0
7 [报告]
发表于 2010-09-29 10:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2010-09-29 10:29 |只看该作者
回复 7# 99超人

确实……
我忘了以前ne的时候都是自己写的print
我改一下
多谢超人啦

论坛徽章:
0
9 [报告]
发表于 2010-09-29 16:41 |只看该作者
谢谢楼上,会报错啊

D:\CDT_Parse后文件>perl -pe 's/\s\d+\s\((\d[^)]+):\d\d\)/ $1/g;s/\s\([^)]*\)$//g
' CDT_重庆1X呼叫_20100924_150124.dat
Can't find string terminator "'" anywhere before EOF at -e line 1.

D:\CDT_Parse后文件>perl -pe s/\s\d+\s\((\d[^)]+):\d\d\)/ $1/g;s/\s\([^)]*\)$//g
CDT_重庆1X呼叫_20100924_150124.dat
Substitution replacement not terminated at -e line 1.

D:\CDT_Parse后文件>perl -ne s/\s\d+\s\((\d[^)]+):\d\d\)/ $1/g;s/\s\([^)]*\)$//g
CDT_重庆1X呼叫_20100924_150124.dat
Substitution replacement not terminated at -e line 1.

论坛徽章:
0
10 [报告]
发表于 2010-09-29 16:54 |只看该作者
回复 1# wxusheng

If the data of row is seperated with tab "\t", the easy way is to use split() method.
i.e.:
my ($aa, $time, $hh, $kk, $ll) = split "\t",  $line, 5;
# then using regex to match time, hh, kk and ll
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP