我有多个文本文件。我编写了代码来通过 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";
}
最佳答案
据我了解,您可以同时读取两个文件的一行并打印用制表符分隔的每一行,例如:
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;
}
如果文件的行数不同,此脚本将不起作用。针对这种情况,您将需要另一种方法。
关于合并多个文本文件的perl代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11340818/