我有两个具有相同行数的文件,每个文件都包含数值列。
文件示例A
1 2 3 4
2 3 4 5
文件示例B
7 8 9 0
6 7 8 9
我想对这两个文件中相应行的值求和,并将结果写入输出文件。
预期输出:
8 10 12 4
8 10 12 14
你可以很容易地做类似的事情..
while ( not eof $fh1 and not eof $fh2 ) {
my @vals1 = split /\s+/, <$fh1>;
my @vals2 = split /\s+/, <$fh2>;
my @sums = join ' ', map {$vals1[$_] + $vals2[$_]} 0 .. $#vals1;
print $out $_ for @sums, "\n";
}
输出:
8 10 12 4
8 10 12 14
考虑到 2 个文件具有相同数量的行和字段
use strict;
use warnings;
use Data::Dumper;
#first data file
open my $fh1, '<', '1.txt' or die $!;
#seecond data file
open my $fh2, '<', '2.txt' or die $!;
#output file
open my $out, '>', 'out.txt' or die $!;
while (!eof($fh1) and !eof($fh2)) {
my $line1 = <$fh1>;
my $line2 = <$fh2>;
my @l1 = split /\s+/, $line1;
my @l2 = split /\s+/, $line2;
my @newvalues;
my $i = 0;
for (@l1){
push @newvalues, $_ + $l2[$i];
$i++;
}
print Dumper \@newvalues;
my $new = join ' ', @newvalues;
print $out $new."\n";
}
有关如何解决此问题的更简洁和更紧凑的代码,请参见下面的 @hwnd 版本