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

标签 perl file-io

我正在审查一个测试,我似乎无法让这个例子正确编码。

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

示例调用:
ileaf 文件 1 文件 2 输出文件


这就是我所拥有的:

#!/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;
    }
}

这会将信息发送到屏幕,以便我可以立即看到结果。最终版本应该“打印 file3 $line1;”我得到所有的 file1 然后所有的 file2 w/out 和行的交错。

如果我理解正确的话,这是一个使用“||”的函数在我的 while 循环中。 while 检查第一次比较,如果为真则进入循环。这只会检查file1。一旦 file1 为假,while 检查 file2 并再次进入循环。

我能做些什么来交错线?

最佳答案

你没有从 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;

关于perl - 使用 perl 将 2 个文件“合并”到第三个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13867324/

相关文章:

linux - 使用 Perl 在 linux(和 windows)上读取密码保护的 XLSX

perl - 如何在 Perl 中递归读取目录?

C 文件处理和记事本中的行尾字符

android - 如何从文件加载文本到textview

php - Perl 中的动态下拉列表

arrays - 循环遍历哈希中包含的数组

database - 使用sqlite增加锁定超时,默认值是多少?

c - C语言对二进制文件的操作

java - 如何从 Java 中的相对路径运行可执行文件

php - 如何从 PHP 保证指定的文件是 BSD/Linux 上的设备?