免费注册 查看新帖 |

Chinaunix

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

[文本处理] 大量数据的解析与比较处理 [复制链接]

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
11 [报告]
发表于 2014-02-13 13:28 |只看该作者
楼主的问题可以分成两部分, 第一部分, 是先拿到得分. 也就是先要知道每个学生的得分是多少.
第二个部分, 是判断是不是合格的学生. 也就是看得分跟标准分的比较结果.

如果数据量真的很大的话, 我建议分成两部分来完成, 先生成一个中间文件, 就是只有得分的文件.
第二部分再来判断是不是合格, 这样只要读中间的得分文件就可以了.

第一部分应该不是太复杂. 就是个数字提取.
第二部分其实更简单, 只要先把标准拿到手, 然后去读 得分就好.

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
12 [报告]
发表于 2014-02-13 13:30 |只看该作者
本帖最后由 rdcwayx 于 2014-02-13 13:31 编辑
说不过去 发表于 2014-02-13 13:26
回复 6# rdcwayx

这个 RS="vobs" file  什么意思,怎么会报错


RS 就是定义 vobs为换行符, 这样可以处理跨行操作, 当然前提是你的所有记录都是在/vobs下的。

如果有报错,请贴出错误信息。如果是在Solaris下运行, 将awk 命令替换成 /usr/xpg4/bin/awk

论坛徽章:
0
13 [报告]
发表于 2014-02-13 13:32 |只看该作者
回复 10# Herowinter


    对的就是这个意思  但是领导希望我写的比较详细些 而且输出的格式要标准些  我上面列出来的 不对其

论坛徽章:
0
14 [报告]
发表于 2014-02-13 13:33 |只看该作者
回复 11# q1208c


    分析我也会的啊 关键是解析的代码不会写

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
15 [报告]
发表于 2014-02-13 13:39 |只看该作者
回复 14# 说不过去

那你得多贴些原始数据. 你现在的数据量太少了, 就算能写出来, 也处理不了异常的情况. 比如你的数字前面后面的字符是不是都一样? 或者你的数字是不是都在相同的位置. 这对提取工作非常重要.


   

论坛徽章:
0
16 [报告]
发表于 2014-02-13 13:52 |只看该作者
回复 15# q1208c


    谢谢啊

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
17 [报告]
发表于 2014-02-13 14:48 |只看该作者
本帖最后由 Herowinter 于 2014-02-13 14:56 编辑

回复 16# 说不过去
凑合着看吧,可能代码可读性不是太好。
i case 结果文件 standard 标准文件
  1. awk 'NR==FNR{if($0~/TEST RESULT/){file=gensub(".*/vobs/rru/rsl/([^/]*).*","\\1",1)}else if($0~/passed/){total[file]=$2;}else if($0~/Run/){total[file]=$3;failed[file]=$6}else if($0~/Coverage/){cov[file]=$(NF-1)};next} {if(FNR==1){print"module\tTotal\tPassed\tCov.\tTotal\tPassed\tCov";next} if($1 in total){s1=+$NF;if($1 in failed){s2=gensub(/.*<=([0-9]+).*/,"\\1",1);if((total[$1]-failed[$1]<=s2)||(cov[$1]<s1))$0=$0"\t"total[$1]"\t"failed[$1]"\t"cov[$1]"\tfailed"}else if(cov[$1]<s1){$0=$0"\t"total[$1]"\t"cov[$1]"\tfailed"}}print}' i standard
复制代码

论坛徽章:
0
18 [报告]
发表于 2014-02-13 14:54 |只看该作者
回复 17# Herowinter


    万分感谢你写了那么长  那个标准文件 跟 case文件 我想在命令行执行的时候 入参  的话    ./jiaoben.sh  i   standard     你最后那边怎么改
   还有我想把结果重定向到一个result文件中

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
19 [报告]
发表于 2014-02-13 15:02 |只看该作者
本帖最后由 Herowinter 于 2014-02-13 15:08 编辑

回复 18# 说不过去
jiaoben.sh这样写
  1. #!/bin/bash

  2. function caseResult(){
  3. awk '
  4.     NR==FNR{if($0~/TEST RESULT/){file=gensub(".*/vobs/rru/rsl/([^/]*).*","\\1",1)}
  5.     else if($0~/passed/){total[file]=$2;}else if($0~/Run/){total[file]=$3;failed[file]=$6}else if($0~/Coverage/){cov[file]=$(NF-1)};next}
  6.     {if(FNR==1){print"module\tTotal\tPassed\tCov.\tTotal\tPassed\tCov";next}
  7.     if($1 in total){s1=+$NF;if($1 in failed){s2=gensub(/.*<=([0-9]+).*/,"\\1",1);if((total[$1]-failed[$1]<=s2)||(cov[$1]<s1))$0=$0"\t"total[$1]"\t"failed[$1]"\t"cov[$1]"\tfailed"}
  8.     else if(cov[$1]<s1){$0=$0"\t"total[$1]"\t"cov[$1]"\tfailed"}}print}' $1 $2 > result
  9. }

  10. caseResult $1 $2
复制代码

论坛徽章:
0
20 [报告]
发表于 2014-02-13 15:16 |只看该作者
本帖最后由 说不过去 于 2014-02-13 15:17 编辑

回复 19# Herowinter

我把全部的代码给你看看



    Array_moudle=(tacl tampcontrol tantennatests tcfr tcpmgr tdigitalsensors teeprom tfcpc\
                tgfh thfm  tpathdelay tpsuisr trpgc ttxattn ttempsense ttcs tcpri tdelaymgr\
                tedpd teh tfcpcs tfpgc tled tralaisg treportmgr tttlna ttxcntl tvswr\
                tiqec tcam tfastrtwp tdivmon trfhead tscheduler)

   function caseResult(){
   awk '
    NR==FNR{if($0~/TEST RESULT/){file=gensub(".*/vobs/rru/rsl/([^/]*).*","\\1",1)}
   else if($0~/passed/){total[file]=$2;}else if($0~/Run/){total[file]=$3;failed[file]=$6}else if($0~/Coverage/){cov[file]=$(NF-1)};next}
    {if(FNR==1){print"module\tTotal\tPassed\tCov.\tTotal\tPassed\tCov";next}
    if($1 in total){s1=+$NF;if($1 in failed){s2=gensub(/.*<=([0-9]+).*/,"\\1",1);if((total[$1]-failed[$1]<=s2)||(cov[$1]<s1))$0=$0"\t"total[$1]"\t"failed[$1]"\t"cov[$1]"\tfailed"}
    else if(cov[$1]<s1){$0=$0"\t"total[$1]"\t"cov[$1]"\tfailed"}}print}' $Line $2 > result
    }

for((i=0;i<${#Array_moudle[@]};i++))
do
   Line=`grep -A 5 "${Array_moudle[$i]}:TEST RESULT" $1 `
   caseResult $Line  $2

done

这个命令Line=`grep -A 5 "${Array_moudle[$i]}:TEST RESULT" $1 `会解析出
-------------------------------------------------------
    |  /vobs/rru/rsl/acl/tacl:TEST RESULT        
    |-------------------------------------------------------
    |   3 cases passed
    |-------------------------------------------------------
    |   555:  =========== gcov_run : Coverage of acl = 57.45%  ===========
    -------------------------------------------------------
这样的数据 一共有34组  所以我用数组来遍历  
然后我运行  ./jiaoben.sh  i  standard  会报错 如下
awk: cmd. line:6: fatal: cannot open file `|' for reading (No such file or directory)
awk: cmd. line:6: fatal: cannot open file `|' for reading (No such file or directory)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP