在家办公的时候,经常要处理一堆日志ref="/tag/182/" style="color:#EB6E00;font-weight:bold;">文件或者配置信息。比如路由器的运行日志分散在好几个文本里,一个个打开太麻烦。这时候要是能把它们合成一个,查看起来就方便多了。
为什么选择Perl来合并文件
Perl虽然年纪不小了,但在处理文本方面依然很能打。系统自带、语法灵活,写几行就能搞定文件操作。特别是面对一堆.log或.conf结尾的小文件,用它批量合并再合适不过。
最简单的合并方法
假设你有 file1.txt、file2.txt 和 file3.txt,想把内容全都塞进 merged.txt 里。下面这段脚本就能完成:
#!/usr/bin/perl
use strict;
use warnings;
open(my $out, '>', 'merged.txt') or die '无法创建输出文件';
for my $filename (<*.txt>) {\
next if $filename eq 'merged.txt';
open(my $fh, '<', $filename) or warn "读取 $filename 失败: $!" && next;
while (<$fh>) {
print $out $_;
}
close($fh);
}
close($out);
print "文件合并完成!\n";
加点小功能更实用
有时候光是拼接不够,还得知道哪段来自哪个文件。可以在每段内容前加上文件名标记:
print $out "--- 开始 $filename ---\n";
while (<$fh>) {
print $out $_;
}
print $out "--- 结束 $filename ---\n\n";
这样翻看大文件时,一眼就知道哪部分是哪个设备的日志,排查网络问题快了不少。
实际应用场景
家里的多台无线设备每天生成各自的连接记录,放在不同文件夹里。写个定时任务,每天凌晨用Perl脚本跑一遍,自动合并成一份总日志,存到NAS上。第二天查谁蹭网、哪个时段卡顿,直接搜这一份就行。
脚本丢进树莓派后台挂着,几乎不占资源,比手动复制粘贴强太多了。