0

2つのテキストファイルがあります。
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;

このコードは空白では実行されません。

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 に答える