免费注册 查看新帖 |

Chinaunix

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

新手的烦恼--文件处理的效率问题[已解决] [复制链接]

论坛徽章:
0
31 [报告]
发表于 2008-12-15 22:48 |只看该作者
原帖由 sthcf 于 2008-12-15 22:19 发表


钻了好一会,完全没看懂 ,试执行了一下
sed: Not a recognized flag: r
Usage:  sed [-n] Script [File ...]
        sed [-n] [-e Script] ... [-f Script_file] ... [File ...]

呵呵 把r参数去掉执 ...

你用的不是linux,是Solaris吧,
那就要改一下了:
cat urfile|tr -d '\n'|sed 's#\([0-9 :]\+\)\[INFO \]([0-9]\+) 解析清单 \[ \([0-9]\+\)\([^|]\+|\)\{7\} \([0-9]\+\)[^~]\+\([0-9~]\{18\}\)[^~]\+\([0-9~]\{18\}\)\([^|]\+|\)\{2\} \([0-9]\{4\}\)[^,]\+,[^]]\+\]#\1;\2;\4;\5;\6;\8\n#g'
正则表达式,痛并快乐着

论坛徽章:
0
32 [报告]
发表于 2008-12-15 22:52 |只看该作者
原帖由 nuclearxin 于 2008-12-15 22:19 发表


我在家没有环境调试
不过可以在
第一个if后面用
while(/解析清单/)getline

[root@rhel5test test]# cat ss.awk
BEGIN{
FS="[]|[]+"
}
{if(/解析清单/){
        key1=$1$4$11
        getline
...


嗯 是可以用的,但是还是出来一样的结果
# awk -f test.awk realbill_ora_st_002_20081204_00080.log > tmp.txt
# cat tmp.txt|wc -l
   15265

无论我使用什么方法,始终少了716行,根据我之前低效率的脚本跑出来的错误文件里有看到下面这样的记录,这也是符合我的要求的行,包含两个(转换后帐单科目)这样的行也是允许在一起连续出现两行的

20081204 23:23:09 [INFO ](2875556) 解析清单 [ 13553353270 | PB | 01 | 4 | 46000 | 68304589 | B| 368 | 2802312a24 | 2 | 05 | N
| 0]! FILE:[RealBillOperator.cpp],LINE:[115]
20081204 23:23:09 [INFO ](2875556) 转换后帐单科目: 2005 FILE:[RealBillOperator.cpp],LINE:[119]
20081204 23:23:09 [INFO ](2875556) 转换后帐单科目: 2004 FILE:[RealBillOperator.cpp],LINE:[119]
20081204 23:23:09 [INFO ](2875556) 普通单 FILE:[RealBillOperator.cpp],LINE:[244]
20081204 23:23:09 [INFO ](2875556) Ebox Info:[0~0~0~0~0~601~0~0] FILE:[RB_Woff.cpp],LINE:[140]
20081204 23:23:09 [INFO ](2875556) After Woff Ebox Info:[0~0~0~0~0~233~0~0] FILE:[RB_Woff.cpp],LINE:[739]
20081204 23:23:09 [INFO ](2875556) 销帐结果 : [7544001841918 | 0 | 233 | 0 | 0 ] FILE:[RealBillOperator.cpp],LINE:[304]

论坛徽章:
0
33 [报告]
发表于 2008-12-15 23:02 |只看该作者
原帖由 walkerxk 于 2008-12-15 22:48 发表

你用的不是linux,是Solaris吧,
那就要改一下了:
cat urfile|tr -d '\n'|sed 's#\([0-9 :]\+\)\([0-9]\+) 解析清单 \[ \([0-9]\+\)\([^|]\+|\)\{7\} \([0-9]\+\)[^~]\+\([0-9~]\{18\}\)[^~]\+\([0-9~]\{1 ...



痛苦并快乐着  

在楼上我终于发现丢失的716行是怎么丢掉的了,太激动了

论坛徽章:
0
34 [报告]
发表于 2008-12-15 23:02 |只看该作者
原帖由 sthcf 于 2008-12-15 22:52 发表


嗯 是可以用的,但是还是出来一样的结果
# awk -f test.awk realbill_ora_st_002_20081204_00080.log > tmp.txt
# cat tmp.txt|wc -l
   15265

无论我使用什么方法,始终少了716行,根据我之前低效率 ...

这个结果和你一开始给出的不一样啊,转换后帐单科目: 有两个,到底要哪个?两个都要?

论坛徽章:
0
35 [报告]
发表于 2008-12-15 23:04 |只看该作者
原帖由 walkerxk 于 2008-12-15 22:48 发表

你用的不是linux,是Solaris吧,
那就要改一下了:
cat urfile|tr -d '\n'|sed 's#\([0-9 :]\+\)\([0-9]\+) 解析清单 \[ \([0-9]\+\)\([^|]\+|\)\{7\} \([0-9]\+\)[^~]\+\([0-9~]\{18\}\)[^~]\+\([0-9~]\{1 ...



walkerxk大大,这么长的正则表达式一时并会没看明白,我先保留下来慢慢研究

论坛徽章:
0
36 [报告]
发表于 2008-12-15 23:05 |只看该作者
问题解决了?
PS:有谁知道怎么快速知道 代表什么表情?我都是一个一个点过去的,当然,常用的看一眼就知道了。实在不行用GM写个脚本,自动替换。

论坛徽章:
0
37 [报告]
发表于 2008-12-15 23:05 |只看该作者
原帖由 walkerxk 于 2008-12-15 23:02 发表

这个结果和你一开始给出的不一样啊,转换后帐单科目: 有两个,到底要哪个?两个都要?


转换后帐单科目  这个出现一次或连续出现两次都是允许的 之前是我弄少了 我错了walkerxk大大

论坛徽章:
0
38 [报告]
发表于 2008-12-15 23:08 |只看该作者
原帖由 walkerxk 于 2008-12-15 23:05 发表
问题解决了?
PS:有谁知道怎么快速知道 代表什么表情?我都是一个一个点过去的,当然,常用的看一眼就知道了。实在不行用GM写个脚本,自动替换。


还没,在使用 nuclearxin 提供的awk来进行修改,正则表达式太长了实在有点理解困难,我先用nuclearxin 大大的试一下,然后再用walkerxk大大的来试   要理解透

论坛徽章:
0
39 [报告]
发表于 2008-12-15 23:09 |只看该作者
其实很简单,就是繁。基础的东西如下:
[abc]:abc中的任意一个字符
a\+:a重复1-任意次
a\{4\}:a重复4次
[^a]:除了a意外的任意字符
\n是引用前面第n个()中包含的东西
然后再根据你的资料来搭一遍就行了。

论坛徽章:
0
40 [报告]
发表于 2008-12-15 23:10 |只看该作者
两次的话我的也要改,而且估计幅度可能有点大。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP