perl代码合并多个文本文件

lak*_*ran 5 perl

我有多个文本文件.我已编写代码通过shell输入2个文件并合并它们.但我如何合并多个文件.系统命令是有用的.

my @a = read_file($file1)
    or die "couldn't read $file1 - $!";
my @b = read_file($file2)
    or die "couldn't read $file2 - $!";

my $combined = {}; # hashref

my $i=0;
foreach (@a) {
    chomp;
    $combined->{$i}{b} = '' unless defined $combined->{$i}{b};
    $combined->{$i++}{a} = $_;
}

$i=0;
foreach (@b) {
    chomp;
    $combined->{$i}{a} = '' unless defined $combined->{$i}{a};
    $combined->{$i++}{b} = $_;
}

foreach my $i (sort {$a<=>$b} keys %$combined) {
    print $combined->{$i}{a}, ("\t" x 2), $combined->{$i}{b}, "\n";
} 
Run Code Online (Sandbox Code Playgroud)

Bir*_*rei 4

据我了解,您可以同时读取两个文件的一行并打印用制表符分隔的每一行,例如:

use warnings;
use strict;

die unless @ARGV == 2;

open my $fha, q|<|, $ARGV[0] or die;
open my $fhb, q|<|, $ARGV[1] or die;

while ( my $a = <$fha>, my $b = <$fhb> ) { 
    chomp( $a, $b );
    printf qq|%s\t\t%s\n|, $a, $b; 
}
Run Code Online (Sandbox Code Playgroud)

如果文件的行数不同,则此脚本将不起作用。对于这种情况,您将需要另一种方法。