如何将许多日志文件视为Perl中的一个虚拟文件?
我在日志目录中有多个访问日志,遵循以下命名约定:
access.log.1284642120 access.log.1284687600 access.log.1284843260 基本上,日志由Apache每天“旋转”,因此可以按顺序对它们进行排序. 我试图“一个接一个地读取它们”,以便它们可以被视为一个日志文件. my @logs = glob('logs/access.log.*'); 上面的代码将全部记录所有日志,但我不确定: >按字母顺序排列日志的顺序是什么? 我有一个Perl脚本可以读取单个访问日志并轻松检查(我的算法是使用一个大的哈希,它使用IP地址作为密钥,访问时间作为值,并继续向其推送键/值对…). 有什么建议?提前谢谢了. 解决方法
如果您想确保特定订单,请自行排序,即使只是为了确保自己能够正确排序:
my @files = sort { ... } glob( ... ); 在这种情况下,除了特定的数字之外,文件名都是相同的,您可能不需要排序块: my @files = sort glob( ... ); 要将它们作为一个超文件读取,我喜欢使用本地@ARGV,因此我可以使用菱形运算符,这实际上只是神奇的ARGV文件句柄.当它到达@ARGV中的一个文件的末尾时,它会移动到下一个文件.这个伪造通过在程序中分配给@ARGV来指定命令行上的所有文件: { local @ARGV = sort { ... } glob( ... ); while( <> ) { ...; } } 如果您需要知道当前正在处理的文件,请查看$ARGV. 如果你需要更花哨的东西,你可能不得不求助于暴力. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |