免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
41 [报告]
发表于 2008-12-15 23:13 |只看该作者
原帖由 walkerxk 于 2008-12-15 23:10 发表
两次的话我的也要改,而且估计幅度可能有点大。


大大,公司保安上来赶人了,要回家了,回家没环境可以测试了,明天见

论坛徽章:
0
42 [报告]
发表于 2008-12-15 23:37 |只看该作者
这么晚还在公司,辛苦了。
我的方法遇到瓶颈了,引用数量超了,如果是perl的话还可以只分组,不捕获,但是sed好像不行,看样子不得不用perl了。
另外,不要叫我大大,我不姓大
其实我的方法不好,容易出错,调试麻烦。

论坛徽章:
0
43 [报告]
发表于 2008-12-16 08:37 |只看该作者

  1. sed -n '/解析/!D;N;/转换/!D;N;/普通/!D;N;/Ebox/!D;N;/After/!D;N;/销帐/!D;p'
复制代码


这段代码能够选出需要的所有6行组,所有的关键字都使用了缩写,如果缩写不符合条件的话,就使用完整的关键字。

至于如何选出需要的部分,不知道那个15的前后有没有什么特殊规律,所以没有写。

[ 本帖最后由 springwind426 于 2008-12-16 08:38 编辑 ]

论坛徽章:
1
2015年亚洲杯之韩国
日期:2015-04-24 09:07:02
44 [报告]
发表于 2008-12-16 08:51 |只看该作者
一下子理解不完 得慢慢消化

论坛徽章:
0
45 [报告]
发表于 2008-12-16 09:04 |只看该作者
原帖由 springwind426 于 2008-12-16 08:37 发表

sed -n '/解析/!D;N;/转换/!D;N;/普通/!D;N;/Ebox/!D;N;/After/!D;N;/销帐/!D;p'


这段代码能够选出需要的所有6行组,所有的关键字都使用了缩写,如果缩写不符合条件的话,就使用完整的关键字。

至于如 ...

那个15不一定是15,可能是任意的一个数字,特征是以|为分隔符的话是第8个域

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
46 [报告]
发表于 2008-12-16 09:08 |只看该作者
原帖由 walkerxk 于 2008-12-15 21:30 发表
这是我这辈子写过的最恶心的正则了,调试了N个小时。


是比较恶心,你还是用perl吧。

论坛徽章:
0
47 [报告]
发表于 2008-12-16 09:14 |只看该作者
在nuclearxin 给出的脚本添加了一下下,能跑出正确结果了,但是比原文件少了一次6行循环,也就是比最终少了一行,原文件是得出的正确结果应该是15981行(长单+普通单 数量的和)的,但是脚本跑出来的结果是15980

# awk  ' (/销帐结果/){print $0}' realbill_ora_st_002_20081204_00080.log|wc -l
   17751
# awk   ' (/长单/){print $0}' realbill_ora_st_002_20081204_00080.log|wc -l
     508
# awk   '(/普通单/){print $0}' realbill_ora_st_002_20081204_00080.log|wc -l
   15473
## awk   '(/短单/){print $0}' realbill_ora_st_002_20081204_00080.log|wc -l
    1770

20081204 23:23:09  13553353270  368  2005~2004 0 0 0 0 0 601 0 0 0 0 0 0 0 233 0 0 7544001841918
20081204 23:23:09  13433849578  88  2004 0 3387 0 0 0 0 0 0 0 3299 0 0 0 0 0 0 7544005088090
20081204 23:23:09  13417175298  15  2020 0 0 0 0 0 4854 0 0 0 0 0 0 0 4839 0 0 7544001374276


  1. BEGIN{
  2. FS="[]|[]+"
  3. }
  4. {if(/解析清单/){
  5.         key1=$1$4$11
  6.         getline
  7.         while(/解析清单/){key1=$1$4$11;getline}
  8.         
  9.         
  10.         if(/转换后帐单科目/){
  11.                 gsub(/.*转换后帐单科目: /,"",$0)
  12.                 gsub(/ FILE:.*/,"",$0)
  13.                 key2=$0
  14.                 getline
  15.                 key22=""
  16.                 while(/转换后帐单科目/){
  17.                         gsub(/.*转换后帐单科目: /,"",$0)
  18.                         gsub(/ FILE:.*/,"",$0)
  19.                         key22=$0
  20.                         getline}
  21.                
  22.                 if(/普通单/ || /长单/){
  23.                         getline
  24.                         if(/Ebox Info:/){
  25.                                 gsub(/~/," ",$4)
  26.                                 key3=$4
  27.                                 getline
  28.                                 if(/After Woff Ebox Info:/){
  29.                                         gsub(/~/," ",$4)
  30.                                         key4=$4
  31.                                         getline
  32.                                         if(/销帐结果/){
  33.                                         gsub(/~/," ",$4)
  34.                                         key5=$4
  35.                                         if (key22==""){print key1,key2,key3,key4,key5}
  36.                                         else {print key1,key2"~"key22,key3,key4,key5}
  37.                                         next
  38.                                         }
  39.                                 }
  40.                         }
  41.                 }
  42.         }
  43. }
  44. }

复制代码

[ 本帖最后由 sthcf 于 2008-12-16 09:15 编辑 ]

论坛徽章:
0
48 [报告]
发表于 2008-12-16 09:51 |只看该作者
试跑了一下,只是跑长单数量是正确的,但是跑普通单少了一行,脚本没问题,是文件还有存在不知道的结构。谢谢各位大侠

论坛徽章:
0
49 [报告]
发表于 2008-12-16 10:15 |只看该作者
原帖由 biglazybug 于 2008-12-15 21:33 发表
FS="[]|[]+" 这是什么写法呢?


差点就整迷糊了

[]|[]+

这两个是一对

论坛徽章:
1
2015年亚洲杯之韩国
日期:2015-04-24 09:07:02
50 [报告]
发表于 2008-12-16 10:18 |只看该作者

回复 #49 smallstar001 的帖子

哦 原来是这么看啊 我也迷糊了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP