如何在各个位置使用两个文件中的元素进行perl计算?

时间:2013-02-10 13:12:23

标签: perl

我有两个文本文件 1.我想将两个文件的每个元素除以相应文件中的数字 2.我想在两个文件中的各个索引位置计算通过上面的计算得到的值之差的平方

file1:

  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 **(按此号码划分每个元素)

file2:

  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;

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

1 个答案:

答案 0 :(得分: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