我正在审查一个测试,我似乎无法让这个例子正确编码。
问题:编写一个名为 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/