免费注册 查看新帖 |

Chinaunix

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

求教,perl如何打开许多个文件,在线等 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-09 20:02 |只看该作者 |倒序浏览
本帖最后由 yuqinghua1982 于 2011-08-09 20:12 编辑

求教,perl如何打开许多个文件,这些文件在同一目录下,以abs_yyyymmdd.dat格式存放,大概240个文件,这些文件以\t分隔,我要读取其中的某列作累加和。我是新手,还请各位大侠不吝赐教

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
2 [报告]
发表于 2011-08-09 20:44 |只看该作者
循环一个一个的open and close files.
Linux还可以用cut,再pipe到perl script.

论坛徽章:
0
3 [报告]
发表于 2011-08-09 20:44 |只看该作者
先以glob读取文件列表。
再对每个文件进行处理。如果只取一列就用正则即可,若是多列就split读到数组处理。

论坛徽章:
0
4 [报告]
发表于 2011-08-10 09:19 |只看该作者
readdir->将文件名存入数组->glob所需文件->for循环逐一打开->正则匹配想要的内容->输出结果



=、=我只是用来做日志分析的。。。

论坛徽章:
3
2015亚冠之阿尔希拉尔
日期:2015-08-15 16:33:2215-16赛季CBA联赛之四川
日期:2016-01-03 13:37:0515-16赛季CBA联赛之四川
日期:2016-06-13 15:53:36
5 [报告]
发表于 2011-08-10 11:44 |只看该作者
本帖最后由 minirain 于 2011-08-10 11:46 编辑
  1. for my $temp ('0'..'9','a'..'z')
  2.   { open ("FILE_TEMP_3$temp", "<" . "WikiToTomeTemp.3$temp") ; }

  3. ...........


  4. for my $tmp ('0'..'9','a'..'z')
  5.   { close ("FILE_TEMP_3$tmp") ; }


复制代码

论坛徽章:
0
6 [报告]
发表于 2011-08-10 17:14 |只看该作者
本帖最后由 yuqinghua1982 于 2012-02-28 09:51 编辑

谢谢楼上各位:
上部分代码

my @t=`ls /home/costreport/costreport_20110*`;
foreach($c=0;$c<@t;$c++){
        open(DFW,"$t[$c]")|| die("can't open this file DFW:$!\n");
        while (<DFW>) {
        chomp;
        my @rowa = split /\t/;

        if(exists($data{$rowa[1]})){
                $data{ $rowa[1] }[5]+= $rowa[2];
                $data{ $rowa[1] }[6]+= $rowa[3];
                $data{ $rowa[1] }[7]+= $rowa[5];
                                       
        }
      }   
   close DFW;
}
open NK,">/home/myu/weihu/number_new.txt"|| die("can't open this file:$!NK\n") ;
foreach $b (keys %data) {
                           print NK  $data{$b}[0], "\t", $data{$b}[1],"\t", $data{$b}[2],"\t", $data{$b}[3],"\t", $data{$b}[4],"\t",sprintf("%.2f",$data{$b}[6]),"\t", $data{$b}[5],"\t", $data{$b}[7],"\n";
                          
}
close NK;

论坛徽章:
0
7 [报告]
发表于 2011-08-10 18:11 |只看该作者
求教,perl如何打开许多个文件,这些文件在同一目录下,以abs_yyyymmdd.dat格式存放,大概240个文件,这些文 ...
yuqinghua1982 发表于 2011-08-09 20:02


Sample code:

  1. use strict;

  2. # current dir or replace your dir
  3. my $dir = ".";
  4.    
  5. my $sum = 0;

  6. opendir DH, $dir or die $!;
  7. # read all files in opened directory
  8. while (my $file = readdir DH) {
  9.     # listing only the files with ending *.dat
  10.     if ($file =~ /\.dat$/i) {
  11.             #print $file , "\n";    # $file is only relative path
  12.         # open the file to read and process it
  13.         my $file_fullpath = $dir . "/" . $file;
  14.         open FH, $file_fullpath or die $!;
  15.         while (my $line = <FH> ) {
  16.                 chmop $line;
  17.             # processing each line and
  18.             # split each field seperated by "\t" into a temp array
  19.             my @fields = split "\t", $line;
  20.             
  21.             # calculate(sum) the request field and/or put the result
  22.             # into a hash
  23.             # i.e.:
  24.             # first field is SERACH_ID
  25.             # second field is data for calculating
  26.             $sum += $fields[1] if $fields[0] eq 'SEARCH_ID';
  27.         }
  28.         close FH;
  29.     }
  30. }
  31. closedir DH;

复制代码

论坛徽章:
0
8 [报告]
发表于 2011-08-11 17:53 |只看该作者
回复 1# yuqinghua1982


    得到目录,循环目录得到文件列表
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP