0

我有两个文本文件。
1.我想将两个文件的每个元素除以各自文件中存在的数字。
2.我想在两个文件中的各个索引位置计算通过上述计算获得的值之间的差异平方。

文件1:

  1000    1.45            1450    1.56            2559     
    335 0.35            499 0.54            1104    
    1433    1.49            1498    1.62            2511    
    684 0.71            263 0.28            1481    

第1111章

文件2:

  2000    1.45            1450    1.56            2559     
    335 0.35            499 0.54            1104    
    1433    1.49            1498    1.62            2511    
    684 0.71            263 0.28            1481    

第2222章

我想要输出,例如第一个元素 [(1000/1111)-(2000/2222)] ^2 等等...

(注意:两个文件中有相同数量的空格或制表符)

#!/usr/bin/perl -w

use List::MoreUtils qw<pairwise>;
print"Enter file 1: ";
chomp($file=<STDIN>);
open(FH,$file);


print"Enter file 2: ";
chomp($hspfile=<STDIN>);
open(FH1,$hspfile);


open(OUT,">$file.$hspfile.txt");

my @list1 = split '\s+', <FH>;
my @list2 = split '\s+', <FH1>;

my @diff  = pairwise { ($p - $q)^2 } @list1, @list2;


print OUT "@diff";
close FH;
close FH1;

此代码不会在空格处运行。

4

1 回答 1

1

大概是这样的?

use strict;
use warnings;

use autodie;

my @data;

for my $file (qw/ file1.txt file2.txt /) {
  open my $fh, '<', $file;
  local $/;
  my $data = <$fh>;
  my $i = 0;
  push @{$data[$i++]}, $_ for  $data =~ /[0-9.]+/g;
}

my $divisor = pop @data;
for (@data) {
  my $val = $_->[0] / $divisor->[0] - $_->[1] / $divisor->[1];
  printf "%.10f\n", $val * $val;
}

输出

0.0000000000
0.0000004258
0.4258414140
0.0000004929
1.3263326558
0.0227301083
0.0000000248
0.0504327886
0.0000000591
0.2468596095
0.4159147013
0.0000004497
0.4545017058
0.0000005315
1.2770423982
0.0947597910
0.0000001021
0.0140095243
0.0000000159
0.4442444469
于 2013-02-10T15:14:13.687 回答