使用perl将2个文件合并到第三个文件中

Lar*_*rry 4 perl file-io

我正在审查一个测试,我似乎无法得到这个例子来正确编码.

问题:编写一个名为ileaf的perl脚本,它将文件的行与另一个文件的行交织在一起,将结果写入第三个文件.如果文件的长度不同,则在末尾写入多余的行.

示例调用:ileaf file1 file2 outfile

这就是我所拥有的:

#!/usr/bin/perl -w

open(file1, "$ARGV[0]");
open(file2, "$ARGV[1]");
open(file3, ">$ARGV[2]");

while(($line1 = <file1>)||($line2 = <file2>)){
    if($line1){
            print $line1;
    }

    if($line2){
            print $line2;
    }
}
Run Code Online (Sandbox Code Playgroud)

这会将信息发送到屏幕,以便我可以立即看到结果.最后一节应该"打印file3 $ line1;" 我得到所有的file1然后所有的文件2 w/out和交错的行.

如果我理解正确,这是使用"||"的功能 在我的while循环中.while检查第一次比较,如果它是真的,则进入循环.这只会检查file1.一旦file1为false,则while检查file2并再次进入循环.

我该怎么做来交错线?

Tim*_*m A 8

你没有得到你想要的东西,while(($line1 = <file1>)||($line2 = <file2>)){因为只要($line1 = <file1>)是真的,($line2 = <file2>)永远不会发生.

尝试这样的事情:

open my $file1, "<", $ARGV[0] or die;
open my $file2, "<", $ARGV[1] or die;
open my $file3, ">", $ARGV[2] or die;

while (my $f1 = readline ($file1)) {
  print $file3 $f1;  #line from file1

  if (my $f2 = readline ($file2)) {  #if there are any lines left in file2
    print $file3 $f2;
  }
}

while (my $f2 = readline ($file2)) {   #if there are any lines left in file2
  print $file3 $f2;
}

close $file1;
close $file2;
close $file3;
Run Code Online (Sandbox Code Playgroud)

  • 当然,`readline($ file1)`通常写成`<$ file1>`.如果需要,打印到STDOUT并简单地将输出重定向到文件也更常见(因为它更灵活). (4认同)