好的,所以我对Perl很新.我有一个文本文件,在文件中有4列数据(日期,时间,文件大小,文件).我需要创建一个可以打开文件并获取文件的平均大小的小脚本.我已经读了很多在线,但我仍然无法弄清楚如何做到这一点.这是我到目前为止,但我不知道我是否接近正确地做到这一点.
#!/usr/bin/perl open FILE,"files.txt"; #@array = File; while(FILE){ #chomp; ($date,$time,$numbers,$type) = split(/ /,<FILE>); $total += $numbers; } print"the total is $total\n";
这是数据在文件中的外观.这些只是其中的几个.我需要在第三列中获取数字.
12/02/2002 12:16 AM 86016 a2p.exe 10/10/2004 11:33 AM 393 avgfsznew.pl 11/01/2003 04:42 PM 38124 c2ph.bat
解决方法
你的程序相当接近工作.通过这些更改,它将完全符合您的要求
>始终在程序开始时使用严格的使用警告,并使用我的声明所有的变量.这将帮助您找到许多简单的错误,您可能会忽略它
>使用词法文件句柄,三参数形式打开,并始终检查任何打开调用的返回状态
>在循环之外声明$total变量.在循环中声明它意味着它将在循环周围被创建和销毁,并且它将无法累积一个总数
>以相同的方式声明$count变量.您将需要它来计算平均值
>使用while(FILE){…}只是测试FILE是真的.您需要从中读取,因此您必须使用readline操作符,如< FILE>
>您希望将默认调用拆分(没有任何参数),这将返回$_中的所有非空格字段作为列表
>您需要在赋值中添加一个变量,以允许在每一行中的AM或PM字段
use strict; use warnings; open my $fh,'<',"files.txt" or die $!; my $total = 0; my $count = 0; while (<$fh>) { my ($date,$ampm,$type) = split; $total += $numbers; $count += 1; } print "The total is $total\n"; print "The count is $count\n"; print "The average is ",$total / $count,"\n";
产量
The total is 124533 The count is 3 The average is 41511