【问题标题】:Perl Open multiple files and write to a single file side by sidePerl 打开多个文件并并排写入单个文件
【发布时间】:2013-02-19 22:17:53
【问题描述】:
我在 windows 中运行一个 Perl 脚本,它创建了多个包含一些信息的文本文件。我想要一些关于 Perl 脚本的帮助,以便将所有文本文件数据并排放入一个文件中。我知道我可以使用嵌套的foreach 循环来解析每个文件并并排打印它们。但是文件的数量会有所不同。
例如:
输入:
file1.txt:
AAA
BBB
CCC
file2.txt:
DDD
EEE
FFF
输出:
AAA DDD
BBB EEE
CCC FFF
提前致谢
【问题讨论】:
标签:
windows
perl
concatenation
【解决方案1】:
Linux 工具 paste 也提供此功能,如果您没有设置滚动您自己的 perl 脚本。
【解决方案2】:
怎么样:
open my $fh, ">", "concat.txt" or die $!;
my $string = qx(
@echo off;
type %*.txt;
);
print $fh $string;
?
【解决方案3】:
应该这样做。
use strict;
use warnings;
use IO::File;
my @files = (q[a.txt], q[b.txt]);
my @fhs = ();
foreach my $file (@files)
{
my $fh = new IO::File $file, O_RDONLY;
push @fhs, $fh if defined $fh;
}
while(1)
{
my @lines = map { $_->getline } @fhs;
last if grep { not defined $_ } @lines[0..(@fhs-1)];
print join(qq[\t], map { s/[\r?\n]+/ /g; $_ } @lines) . qq[\r\n];
}
map { $_->close } @fhs;