我有两个文本文件 1.我想将两个文件的每个元素除以相应文件中的数字 2.我想在两个文件中的各个索引位置计算通过上面的计算得到的值之差的平方。
file1:
1111 **(按此号码划分每个元素)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
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;
此代码不会在空格处运行。
答案 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