合并多个文本文件的perl代码

标签 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";
} 

最佳答案

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

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/

相关文章:

perl - 使用 “before-the loop”时如何指定 “perl -ne”代码?

perl - Perl脚本-从管道ssh shell 将STDOUT打印到文件中

perl - 如何使用 Perl 删除 Excel 工作表中的整列并在新的 Excel 文件中写入更新的数据?

perl - 为什么 perl 的 autodie 功能不包括 "print"? (有解决方法吗?)

Netbeans IDE 8.0 上的 Perl

Perl 脚本不能 fork 超过 10 次

perl - 如何将 fork 子程序的哈希内容传递回主程序?

perl - 将元素附加到已存在的 SOAP::Data 复杂类型

php - Perl CGI 脚本中 PHP 的 $_POST 的等价物是什么?我该如何使用它?

Perl 时区转换 - 但仅使用核心模块