如何将每个文件数据与特定目录perl中的每个文件相加?

时间:2014-09-01 16:44:19

标签: perl

如何将每个文件与一个文件相加perl我的文件数据

File1中

1
23
12
43

文件2

1
98
11
3

文件3

12
113
34
24

FILE4

12
143
123
1

我试着试试这个:

$dir = 'd:\occ';
opendir (file,"$dir");
@eachfile = grep{m/.*\.txt/g} readdir (file);

for ($i = 0; $i<=scalar @eachfile; $i++){
    for ($j=0; $j<=scalar @eachfile; $j++){
        open(fil1,"$dir/$i");
        open(fil2,"$dir/$j");
        @ar = <fil1>;
        @br = <fil2>;
        my $tot;
        $tot+=$_,foreach (@ar);
        $divide = $tot/4;
        my $tot2;
        $tot2+=$_,foreach (@br);
        $divide2 = $tot2/4;
        $ans = $divide+$divide2;
        print "$i + $j = $ans\n";
    }
}

我希望每个文件都添加四个。然后将每个值与另一个数据相加。 最后通过此代码计算16个输出我该怎么做。我希望输出

1 + 1 = 39.5
1 + 2 = 48
1 + 3 = 65.75
1 + 4 = 89.5
2 + 1 = 48
2 + 2 = 56.5
... and so on
4 + 3 = 115.5
4 + 4 = 139.5

计算总共16个输出

2 个答案:

答案 0 :(得分:0)

首先,您要查找每个文件的平均值。

open(my $fh, '<', $file_name) or die $!;

my $sum;
my $count;
while (<$fh>) {
   chomp;
   $sum += $_;
   ++$count;
}

$avgs{$file_name} = $sum/$count;

这会给你

my %avgs = (
   'File1' => (1+23+12+43)/4,
   'File2' => (1+98+11+3)/4,
   'File3' => (12+113+34+24)/4,
   'File4' => (12+143+123+1)/4,
);

现在,您希望依次添加每个元素及其后续元素。这只是两个嵌套循环。

my @file_names = sort keys %avgs;

for my $i (0..$#file_names) {
   for my $j ($i..$#file_names) {
      print "$file_names[$i] + $file_names[$j] = ",
         $file_names[$i] + $file_names[$j], "\n";
   }
}

答案 1 :(得分:0)

我问了一些错误的问题,所以只有任何一个人都不理解我的问题。我解决了一个问题。

 $dir = 'd:\occ';
 opendir (file,"$dir");
 @eachfile = grep{m/.*\.txt/g} readdir (file);
 for ($i=0; $i<=scalar @eachfile; $i++){
    for ($j=0; $j<= scalar @eachfile; $j++){
        open(fil1,"$dir/$eachfile[$i]");
        open(fil2,"$dir/$eachfile[$j]");
        @ar = <fil1>;
        @br = <fil2>;
        my $tot;
        $tot+=$_,foreach (@ar);
        $divide = $tot/4;
        my $tot1;
        $tot1+=$_,foreach (@br);
        $divid = $tot1/4;
        $ans = $divide + $divid;

        print "$i + $j  = $ans\n";
    }

 }

在此脚本中打印我期望的输出。