1

我有两个文件。

文件 1 包含

abc
def
ghi 

在单个列中(3 个单独的行)

文件 2 包含

123
456
789 

(在单列中(3 个单独的行)

我正在尝试将这两个文件中的值加入到一个新的逗号分隔文件中。我希望将一个文件中的所有值捕获到两个不同的数组中,并使用“join”命令来“join”它们。但是我在尝试将值捕获到数组中时遇到了几个错误。我尝试了几个while循环。但他们所有人都不断遇到一个错误或另一个错误。这是我最新的while循环

#!/usr/bin/perl
use strict;
use warnings;

my $filename1 = "file1";
open ( my $fh , "<", $filename1) or die "Could not open '$filename1'\n";
while (1) {my $line = <$fh>} ;
my @name = $line ;
print @name;

我知道我应该能够通过使用 bash 的简单“加入”命令来做到这一点。但我想学习如何在 perl 中做到这一点。

4

3 回答 3

0

只是为了确保你想要输出

abc,123
def,456
ghi,789

对于你给出的例子,对吧?
如果是这样,下面的代码应该做的事情。

#!/usr/bin/perl

use strict;
use warnings;

open F1, "file1.in" or die "$!";
open F2, "file2.in" or die "$!";
open OUTPUT_FILE, ">output.out" or die "$!";

while (defined(my $f1 = <F1>) and defined(my $f2 = <F2>)) {
    chomp $f1;
    chomp $f2;
    print OUTPUT_FILE "$f1,$f2\n";
}

close OUTPUT_FILE;
close F1;
close F2;
于 2013-09-29T23:36:52.723 回答
0

我假设file1的行数与file2相同。

#!/usr/bin/perl
use warnings;
use strict;

open (my $IN1,'<','file1.txt') or die "$!"; #open 1st file
open (my $IN2,'<','file2.txt') or die "$!"; #open 2nd file
open (my $OUT,'>','out.txt') or die "$!";   #create new file
while (<$IN1>) {
    chomp;                                  #remove newline from each row of the 1st file
    my $x=readline $IN2;                    #read line from 2nd file
    print $OUT join(',',$_,$x);             #print the desired output
}
close $IN1;
close $IN2;
close $OUT;
于 2013-09-29T23:35:32.827 回答
0

join in bash 做的事情与 join in Perl 不同。在 Perl 中,您需要使用循环,或者类似 List::MoreUtils::pairwise 或 Algorithms::Loops::MapCar 之类的东西。

use File::Slurp 'read_file';
my @file1_lines = read_file('file1', 'chomp' => 1);
my @file2_lines = read_file('file2');

然后:

use List::MoreUtils 'pairwise'; use vars qw/$a $b/;
print pairwise { "$a,$b" } @file1_lines, @file2_lines;

或者:

use Algorithm::Loops 'MapCarE';
print MapCarE { "$_[0],$_[1]" } \@file1_lines, \@file2_lines;

(如果文件有不同的行数,MapCarE 会抛出异常;其他变体有其他行为。)

于 2013-09-29T23:50:38.247 回答