免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
51 [报告]
发表于 2008-12-16 10:30 |只看该作者
if(/After Woff Ebox Info:/){
                                        gsub(/~/," ",$4)
                                        key4=$4
                                        getline
这部分有问题
如果getline进来的是解析清单就完了
不知道awk 没有 goto
不过可以把它定义成函数吧
看看能不?

  1. BEGIN{
  2. FS="[]|[]+"
  3. }
  4. function analyzex() {
  5. if(/解析清单/){
  6.         key1=$1$4$11
  7.         getline
  8.         while(/解析清单/){key1=$1$4$11;getline}
  9.         if(/转换后帐单科目/){
  10.                 gsub(/.*转换后帐单科目: /,"",$0)
  11.                 gsub(/ FILE:.*/,"",$0)
  12.                 key2=$0
  13.                 getline
  14.                 key22=""
  15.                 while(/转换后帐单科目/){
  16.                         gsub(/.*转换后帐单科目: /,"",$0)
  17.                         gsub(/ FILE:.*/,"",$0)
  18.                         key22=$0
  19.                         getline}

  20.                 if(/普通单/ || /长单/){
  21.                         getline
  22.                         if(/Ebox Info:/){
  23.                                 gsub(/~/," ",$4)
  24.                                 key3=$4
  25.                                 getline
  26.                                 if(/After Woff Ebox Info:/){
  27.                                         gsub(/~/," ",$4)
  28.                                         key4=$4
  29.                                         getline
  30.                                         if(/销帐结果/){
  31.                                         gsub(/~/," ",$4)
  32.                                         key5=$4
  33.                                                 if (key22==""){print key1,key2,key3,key4,key5}
  34.                                                 else {print key1,key2"~"key22,key3,key4,key5}
  35.                                         next
  36.                                         }
  37.                                         if(/解析清单/)analyzex()
  38.                                 }
  39.                         }
  40.                 }
  41.         }
  42. }
  43. }
  44. {
  45. analyzex()
  46. }
复制代码

论坛徽章:
0
52 [报告]
发表于 2008-12-16 10:56 |只看该作者
看的晕了

我觉得麻烦的是,连LZ都不确认他文件的格式
一开始说是6行,后来发现还有7行的,那有没有5行的?
这个不确定,那就麻烦的多了

论坛徽章:
0
53 [报告]
发表于 2008-12-16 11:11 |只看该作者
原帖由 welcome008 于 2008-12-16 10:56 发表
看的晕了

我觉得麻烦的是,连LZ都不确认他文件的格式
一开始说是6行,后来发现还有7行的,那有没有5行的?
这个不确定,那就麻烦的多了



正常的情况是6或7行,但因为系统根据日志文件的大小,每20M截取一次,导致了本应该在一起的6行或7行其中的3行(不一定是3)在上一个文件,剩下的3或4行在下一个文件里,之前那个跑出来的结果正确的

论坛徽章:
0
54 [报告]
发表于 2008-12-16 11:13 |只看该作者
原帖由 nuclearxin 于 2008-12-16 10:30 发表
if(/After Woff Ebox Info:/){
                                        gsub(/~/," ",$4)
                                        key4=$4
                                        getline
这部分有问 ...

nuclearxin 大侠,这个可以不用考虑了,我只需要在分析第一行是不是解析清单的时候,加上判断 $11 是不是0就可以了,非0的接下来应该都是形成一个6或7行的循环的。如果系统没出故障,文件就都是这样的,所以那个脚本已经是可以用了,谢谢大侠

论坛徽章:
0
55 [报告]
发表于 2008-12-16 12:34 |只看该作者
awk讨论的经典贴子,建议加精

论坛徽章:
0
56 [报告]
发表于 2008-12-17 13:16 |只看该作者
原帖由 werich 于 2008-12-16 12:34 发表
awk讨论的经典贴子,建议加精

呵呵
只是AWK的简单应用而已~

当然,对于没用过awk的新手可能显得很神奇~

论坛徽章:
0
57 [报告]
发表于 2008-12-17 14:03 |只看该作者
文本处理的话,perl python
会很强
代码清晰
速度快8

论坛徽章:
0
58 [报告]
发表于 2008-12-17 21:51 |只看该作者
high high high
看的爽 神奇的shell 神奇的各路热心人

论坛徽章:
0
59 [报告]
发表于 2008-12-22 17:06 |只看该作者
如果是我,我会用C程序来实现。
在某些可能的情况下,我发现用VFP来处理方便的话,我会用VFP来处理,结果放入 .DBF。
总之,用我最擅长的工具,快速搞掂。同时方便以后别人看懂我的程序。

论坛徽章:
0
60 [报告]
发表于 2008-12-22 17:39 |只看该作者
原帖由 sthcf 于 2008-12-16 11:11 发表



正常的情况是6或7行,但因为系统根据日志文件的大小,每20M截取一次,导致了本应该在一起的6行或7行其中的3行(不一定是3)在上一个文件,剩下的3或4行在下一个文件里,之前那个跑出来的结果正确的



那这个好像不能保证程序读文件时都是按照你的文件顺序来的吧?

如果不是按照文件顺序,那你这个结果就很难统一哦

我觉得还得在脚本里保证一下,读入文件是顺序的,不然,结果不一定可靠
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP