首页 > 解决方案 > Perl 将多个文件内容合并到单个文件中

问题描述

我有多个日志文件,比如 file1.log file2.log file3.log 等。我想将这些文件内容合并到一个名为 result_file.log 的文件中

是否有任何 Perl 模块可以实现这一点?

更新:这是我的代码

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use File::Copy;

my @files;

my $dir = "/path/to/directory";

opendir(DIR, $dir) or die $!;

while (my $file = readdir(DIR)) {

    # We only want files
    next unless (-f "$dir/$file");

    # Use a regular expression to find files ending in .log
    next unless ($file =~ m/\.log$/);

    print "$file\n";

    push( @files, $file);
}

closedir(DIR);

print Dumper(\@files);

open my $out_file, ">result_file.log" ;
copy($_, $out_file) foreach ( @files );

exit 0;

您认为这是可行的解决方案吗?

标签: fileperl

解决方案


CPAN 'File::Copy' 应该可以完成这项工作,您必须自己打开输出文件。

use File::Copy ;
open my $out, ">result.log" ;
copy($_, $out) foreach ('file1.log', 'file2.log', );
close $out ;

更新1: 根据发布的附加信息回答,看起来要求是连接(在Perl中)文件列表匹配模式(* .log)。下面扩展了上述解决方案以包括额外的逻辑,使用glob、避免readdir和过滤。

use File::Copy ;

open my $out, ">result.log" ;
copy($_, $out) foreach glob('/path/to/dir/*.log' );
close $out ;

重要说明: * 使用 glob 将按字母顺序排序文件名,而 readdir 不保证任何顺序。* 输出文件 'result.log' 匹配 '*.log',不应执行当前目录中的代码。


推荐阅读