免费注册 查看新帖 |

Chinaunix

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

请教高手:如何快速读取和查找数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-02 12:47 |只看该作者 |倒序浏览
  1. PTR:2707|1|3|15|P||wafer number <> deep_sleep||LH
  2. PTR:2710|1|3|118|P||wafer x <> deep_sleep
  3. PTR:2711|1|3|22|P||wafer y <> deep_sleep
  4. EPS:
  5. BPS:krakatoa_serialise
  6. PTR:2970|1|3|1|P||company eui ok <> serialise4||LH
  7. DTR:<cmd> partid = 000d6f00017adfda
  8. PTR:2960|1|3|510|P||val_1fe <> serialise4
  9. PTR:2961|1|3|3|P||Regulator Trim <> serialise4
  10. PTR:2951|1|3|16|P||Prescaler offset <> serialise4
  11. PTR:2950|1|3|7|P||Prescaler row <> serialise4
  12. PTR:2952|1|3|65|P||test program rev <> serialise4
  13. PTR:2953|1|3|1|P||Checksum ok <> serialise4
  14. PTR:2954|1|3|42330|P||Status REG 7f5e <> serialise4
  15. PTR:2955|1|3|1|P||EEPROM delete trials <> serialise4
  16. PTR:2962|1|3|6294|P||Masterbias setting <> serialise4
  17. PTR:2980|1|3|1.73703|P||Trim 1v7 from flash <> serialise4
  18. PTR:2981|1|3|1.14621|P||masterbias from flash <> serialise4
  19. EPS:
  20. PRR:1|3|12|750|P|1|1|||||5634
  21. PIR:1|1
  22. GDR:TIMAGE_PART_ID|L218103808
  23. BPS:em250_cont
  24. PTR:1|1|1|250|P||Board ID <> board_id||LH
  25. PTR:2|1|1|4003|P||Serial number <> board_id||L
  26. PTR:1000|1|1|-0.465872|P||OPEN_OSC32B <> cont_em250|||v|-1|-0.3|%6.3f v|%6.3f v|
  27. %6.3f v|||0|0|0
  28. PTR:1001|1|1|-0.463935|P||OPEN_VREG_OUT <> cont_em250|||v|-1|-0.3|%6.3f v|
  29. %6.3f v|%6.3f v|||0|0|0
  30. PTR:1002|1|1|-0.465399|P||OPEN_GPIO_12 <> cont_em250|||v|-1|-0.3|%6.3f v|
  31. %6.3f v|%6.3f v|||0|0|0
复制代码
一段像上面这样的数据,每个文件400M左右,我想把下面几行读出来,这只是每一颗测试产品的结果,总共的400M文件中有10000组这样的数据。

问题1:我当前是用的循环去读取每一行,然后进行判断抓取需要的信息,是否有其他更快速的方法例如shell中的grep那样抓到需要的信息,如果有,如何抓取多行信息。

问题2:我当前把抓到的信息存在一个单独的A.txt文件中,然后再把每个读取到的信息和文件中的进行比较(同样也是用循环每行比较),如果相同则进行标注,但当我执行的文件数量比较多的时候,那个A.txt会变得很大,然后速度就会很慢,是否有更快速的方法,最好不是访问数据库的,是否有不用每行循环去进行查找比较的。
  1. PTR:2707|1|3|15|P||wafer number <> deep_sleep||LH
  2. PTR:2710|1|3|118|P||wafer x <> deep_sleep
  3. PTR:2711|1|3|22|P||wafer y <> deep_sleep
  4. DTR:<cmd> partid = 000d6f00017adfda
  5. PRR:1|3|12|750|P|1|1|||||5634
复制代码

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2011-03-02 14:27 |只看该作者
你先写个能跑的,如果真的有效率问题大家再帮你优化啊

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2011-03-02 15:21 |只看该作者
请贴code

论坛徽章:
0
4 [报告]
发表于 2011-03-02 15:59 |只看该作者
  1. #! /usr/bin/perl -w
  2. #use strict;                                                
  3. #use warnings;   
  4. my $curLine;
  5. my ($preEUItest,$EUItest,$EUIbinning);
  6. my (@preEUItests,@EUItests,@EUIbinnings,@preTemps);
  7. my ($testNumber,$EUIcounter,$EUInumber,$testResult);
  8. my @libEUI;
  9. my ($flagNewEUI,$tempEUI);
  10. my ($hardware,$LBid);
  11. my @hardwares;
  12. my @waferInfor;
  13. my ($waferID,$waferX,$waferY);

  14. print "The original file name is:",$ARGV[0],".bak and converted file name is:$ARGV[0]\n";
  15. print "------------------------------------------------------------------------------\n";

  16. ##-DeviceID- -Site- -TResult- -TNumber- -Used_EmberPD_EUI_ID- -EUI_Serio- -HBin- -SBin-
  17. ##    00001      0      PASS      2970    000d6f00012e95f9      000001      6     34

  18. my $allEUIdata=$ARGV[0]."_allEUIXYdata.log";
  19. my $passEUIdata=$ARGV[0]."_passEUIXYdata.log";
  20. my $databaseEmberEUI="databaseEmberEUI_dieID.log";
  21. my @databaseEUI;
  22. my ($databaseCounter,$curdatabaseCounter,$flagdatabase,$databaseStr);
  23. my $fileNameSTDF=$ARGV[0];
  24. $waferID="NA";
  25. $waferX="NA";
  26. $waferY="NA";
  27. open ALLEUIDATA,">$allEUIdata" or die "write file $allEUIdata failed $!";
  28. open PASSEUIDATA,">$passEUIdata" or die "write file $passEUIdata failed $!";
  29. open DATABASEEUI,"$databaseEmberEUI";
  30. @databaseEUI=<DATABASEEUI>;
  31. close DATABASEEUI;
  32. open DATABASEEUI,">>$databaseEmberEUI" or die "write file $databaseEmberEUI failed $!";
  33. printf PASSEUIDATA ("%10s %6s %9s %9s %21s %11s %6s %6s %10s %12s %9s %8s %8s %s\n","-DeviceID-","-Site-","-TResult-","-TNumber-","-Used_EmberPD_EUI_ID-","-EUI_Serio-","-HBin-","-SBin-","-LBoardID-","-FreshEUIID-","-WaferID-","-WaferX-","-WaferY-","-DataBaseStr-");
  34. while(<>){
  35.         chomp;
  36.         $curLine=$_;
  37.         if(/^PIR:/){
  38.                 print ALLEUIDATA $curLine,"\n";
  39.         }
  40.         elsif(/^SDR:/){
  41.                 $hardware=$curLine;
  42.                 @hardwares=split(/\|/,$hardware);
  43.                 @hardwares[10]=~s/\W+//;
  44.                 @hardwares[10]=~s/\r//;
  45.                 $LBid=@hardwares[10];
  46.         }
  47.         elsif(/^PTR:(.*)wafer number/){
  48.                 @waferInfor=split(/\|/,$curLine);
  49.                 $waferID=@waferInfor[3];
  50.         }

  51.         elsif(/^PTR:(.*)wafer x/){
  52.                 @waferInfor=split(/\|/,$curLine);
  53.                 $waferX=@waferInfor[3];
  54.         }
  55.         elsif(/^PTR:(.*)wafer y/){               
  56.                 @waferInfor=split(/\|/,$curLine);
  57.                 $waferY=@waferInfor[3];
  58.         }
  59.         elsif(/^PTR:(.*)company eui ok/){
  60.                 $preEUItest=$curLine;
  61.                 print ALLEUIDATA $curLine,"\n";               
  62.                
  63. #                print ALLEUIDATA $curLine,"\n";               
  64.         }
  65.         elsif(/^DTR:\<cmd\>/){
  66.                 if($preEUItest ne ""){
  67.                         $EUItest=$curLine;
  68.                 }
  69.                 else{
  70.                         $preEUItest="AbnormalData";
  71.                         $EUItest=$curLine;
  72.                 }
  73.                 print ALLEUIDATA $curLine,"\n";               
  74.         }
  75.         elsif(/^PRR:/){
  76.                
  77.                 ##Device:        -DeviceID- -Site- -TResult- -TNumber- -Used_Ember_EUI_ID- -EUI_Serio- -HBin- -SBin-
  78.                 ##device#     00001      0      PASS      2970    000d6f00012e95f9      000001      6     34
  79.                
  80.                 $EUIbinning=$curLine;
  81.                 if($EUItest ne "" && $preEUItest ne "AbnormalData"){
  82.                         @preEUItests=split(/\|/,$preEUItest);
  83.                         @EUItests=split(/=/,$EUItest);
  84.                         @EUIbinnings=split(/\|/,$EUIbinning);
  85.                         @preTemps=split(/:/,@preEUItests[0]);
  86.                         $testNumber=@preTemps[1];
  87.                         $flagNewEUI=1;
  88.                         @EUItests[1]=~s/\W+//;
  89.                         @EUItests[1]=~s/\r//;
  90.                         foreach $tempEUI(@libEUI){
  91.                                 if(@EUItests[1] eq $tempEUI){
  92.                                         $flagNewEUI=0;
  93.                                 }
  94.                         }

  95.                         if($flagNewEUI eq 1 && @EUItests[1]=~/000d6f00/){
  96.                                 $flagNewEUI=0;
  97.                                 $EUIcounter++;
  98.                                 $EUInumber=$EUIcounter;
  99.                                 push(@libEUI,@EUItests[1]);
  100.                         }
  101.                         else{
  102.                                 $EUInumber=0;
  103.                         }
  104.                         if(@EUIbinnings[4] eq "P"){
  105.                                 $testResult="PASS";
  106.                         }
  107.                         elsif(@EUIbinnings[4] eq "F"){
  108.                                 $testResult="FAIL";
  109.                         }
  110.                         else{
  111.                                 $testResult="ERROR";
  112.                         }
  113.                        
  114.                         $curdatabaseCounter=0;
  115.                         $databaseCounter=0;
  116.                         $flagdatabase=1;
  117.                         $databaseStr="NEW_ID\n";
  118.                         foreach $tempEUI(@databaseEUI){
  119.                                 if ($tempEUI=~/^@EUItests[1]/){
  120.                                         $flagdatabase=0;
  121.                                         $curdatabaseCounter=$databaseCounter+1;
  122.                                         $databaseStr="RepeatID|---".$tempEUI;
  123.                                 }
  124.                                 else{
  125.                                         $databaseCounter++;
  126.                                 }
  127.                         }
  128.                         if($flagdatabase eq 1 && @EUItests[1]=~/000d6f00/){
  129.                                 $curdatabaseCounter=scalar(@databaseEUI)+1;
  130.                                 $databaseStr=@EUItests[1]."_HB".@EUIbinnings[5]"_DBid:".$curdatabaseCounter."_SB".@EUIbinnings[6]."_LB:".$LBid."_waferID:".$waferID."_waferX:".$waferX."_waferY:".$waferY."_".$fileNameSTDF."\n";
  131.                                 push(@databaseEUI,$databaseStr);
  132.                                 printf DATABASEEUI ("%s",$databaseStr);
  133.                                 $databaseStr="NEW_ID\n";
  134.                         }
  135.                         if(!(@EUItests[1]=~/000d6f00/)){
  136.                                 $databaseStr="INVALID_ID\n";
  137.                         }

  138.                         printf PASSEUIDATA ("%09s  %5s  %8s  %8s  %20s  %010s  %5s  %5s  %9s  %11s  %8s  %7s  %7s  %s",@EUIbinnings[2],@EUIbinnings[1],$testResult,$testNumber,@EUItests[1],$EUInumber,@EUIbinnings[5],@EUIbinnings[6],$LBid,$curdatabaseCounter,$waferID,$waferX,$waferY,$databaseStr);
  139.                         $waferID="NA";
  140.                         $waferX="NA";
  141.                         $waferY="NA";
  142.                         $preEUItest="";
  143.                         $EUItest="";
  144.                         $EUIbinning="";
  145.                 }
  146.                
  147.                 elsif($EUItest ne "" && $preEUItest ne "AbnormalData"){
  148.                         @EUItests=split(/=/,$EUItest);
  149.                         @EUIbinnings=split(/\|/,$EUIbinning);
  150.                         $flagNewEUI=0;
  151.                         @EUItests[1]=~s/\W+//;
  152.                         @EUItests[1]=~s/\r//;
  153.                         foreach $tempEUI(@libEUI){
  154.                                 if(@EUIbinnings[4] eq "P" && @EUItests[1] eq $tempEUI){
  155.                                         $flagNewEUI=1;
  156.                                 }
  157.                         }
  158.                         if($flagNewEUI eq 1){
  159.                                 $flagNewEUI=0;
  160.                                 $EUIcounter++;
  161.                                 $EUInumber=$EUIcounter;
  162.                                 push(@libEUI,@EUItests[1]);
  163.                         }
  164.                         else{
  165.                                 $EUInumber=0;
  166.                         }
  167.                         if(@EUIbinnings[4] eq "P"){
  168.                                 $testResult="PASS";
  169.                         }
  170.                         elsif(@EUIbinnings[4] eq "F"){
  171.                                 $testResult="FAIL";
  172.                         }
  173.                         else{
  174.                                 $testResult="ERROR";
  175.                         }
  176.                         printf PASSEUIDATA ("%9s  %5s  %8s  %8s  %20s  %10s  %5s  %5s\n",@EUIbinnings[2],@EUIbinnings[1],$testResult,"NON",@EUItests[1],$EUIcounter,@EUIbinnings[5],@EUIbinnings[6]);
  177.                         $preEUItest="";
  178.                         $EUItest="";       
  179.                         $EUIbinning="";               
  180.                 }
  181.                 else{
  182.                        
  183.                 }
  184.                        
  185.                        
  186.                
  187.                
  188.                
  189.                 print ALLEUIDATA $curLine,"\n";               
  190.         }
  191.         else{       
  192.         }
  193. }       

  194. #print DATABASEEUI @databaseEUI;
  195. close ALLEUIDATA;
  196. close PASSEUIDATA;
  197. close DATABASEEUI;
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-03-02 16:01 |只看该作者
写了,有点长,刚开始还很快,处理的文件多了以后就慢了,现在处理一个文件要半小时了。。。

论坛徽章:
0
6 [报告]
发表于 2011-03-04 10:23 |只看该作者
没人愿意帮忙吗???

论坛徽章:
0
7 [报告]
发表于 2011-03-04 12:39 |只看该作者
回复 6# MicoCN


    先把需求写清楚.....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP