file - 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;
您认为这是可行的解决方案吗?
解决方案
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',不应执行当前目录中的代码。
推荐阅读
- sql - 用不同的字符分隔sql
- testing - 寻找可以与 CLI 项目一起使用的测试自动化工具
- python - python中的非均匀等高线图
- css - 努力在 CSS 中正确溢出
- swift - 如何从 Firestore 引用中获取数据?
- asp.net-mvc - Kendo MVC 服务器端分页
- node.js - 无法计算 webdriverio devtools 中的性能指标
- python - 如何在字符串数据框中实现千位分隔符而不用 Python Pandas 中的百分比值在一行中进行修改?
- java - JavaFX中的单向绑定和转换设置
- python - 我如何*动态*在 SQLAlchemy 中为 MSSQL 设置模式?