我在日志目录中有多个访问日志,遵循以下命名约定:
access.log.1284642120
access.log.1284687600
access.log.1284843260
Run Code Online (Sandbox Code Playgroud)
基本上,日志由Apache每天"旋转",因此可以按顺序对它们进行排序.
我试图"一个接一个地读取它们",以便它们可以被视为一个日志文件.
my @logs = glob('logs/access.log.*');
Run Code Online (Sandbox Code Playgroud)
上面的代码将全部记录所有日志,但我不确定:
我有一个Perl脚本可以读取单个访问日志并轻松检查(我的算法是使用一个大的哈希,它使用IP地址作为密钥,访问时间作为值,并继续向其推送键/值对...).但我不想只是为了这个过程将所有访问文件合并到一个临时文件中.
有什么建议?提前谢谢了.
bri*_*foy 11
如果您想确保特定订单,请自行排序,即使只是为了确保自己能够正确排序:
my @files = sort { ... } glob( ... );
Run Code Online (Sandbox Code Playgroud)
在这种情况下,除了特定的数字之外,文件名都是相同的,您可能不需要排序块:
my @files = sort glob( ... );
Run Code Online (Sandbox Code Playgroud)
要将它们作为一个超文件读取,我喜欢使用,local @ARGV所以我可以使用钻石操作符,这实际上只是魔术ARGV文件句柄.当它到达一个文件的末尾时@ARGV,它会移动到下一个文件.这个伪造通过分配到@ARGV程序内部来指定命令行上的所有文件:
{
local @ARGV = sort { ... } glob( ... );
while( <> ) {
...;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要知道当前正在处理的文件,请查看$ARGV.
如果你需要更花哨的东西,你可能不得不求助于暴力.