加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何将许多日志文件视为Perl中的一个虚拟文件?

发布时间:2020-12-15 21:44:28 所属栏目:大数据 来源:网络整理
导读:我在日志目录中有多个访问日志,遵循以下命名约定: access.log.1284642120access.log.1284687600access.log.1284843260 基本上,日志由Apache每天“旋转”,因此可以按顺序对它们进行排序. 我试图“一个接一个地读取它们”,以便它们可以被视为一个日志文件. my
我在日志目录中有多个访问日志,遵循以下命名约定:
access.log.1284642120
access.log.1284687600
access.log.1284843260

基本上,日志由Apache每天“旋转”,因此可以按顺序对它们进行排序.

我试图“一个接一个地读取它们”,以便它们可以被视为一个日志文件.

my @logs = glob('logs/access.log.*');

上面的代码将全部记录所有日志,但我不确定:

>按字母顺序排列日志的顺序是什么?
>如果我想查看“来自唯一IP的最新访问时间”,我该怎么做?

我有一个Perl脚本可以读取单个访问日志并轻松检查(我的算法是使用一个大的哈希,它使用IP地址作为密钥,访问时间作为值,并继续向其推送键/值对…).
但我不想只是为了这个过程将所有访问文件合并到一个临时文件中.

有什么建议?提前谢谢了.

解决方法

如果您想确保特定订单,请自行排序,即使只是为了确保自己能够正确排序:
my @files = sort { ... } glob( ... );

在这种情况下,除了特定的数字之外,文件名都是相同的,您可能不需要排序块:

my @files = sort glob( ... );

要将它们作为一个超文件读取,我喜欢使用本地@ARGV,因此我可以使用菱形运算符,这实际上只是神奇的ARGV文件句柄.当它到达@ARGV中的一个文件的末尾时,它会移动到下一个文件.这个伪造通过在程序中分配给@ARGV来指定命令行上的所有文件:

{
 local @ARGV = sort { ... } glob( ... );

 while( <> ) {
      ...;
      }
 }

如果您需要知道当前正在处理的文件,请查看$ARGV.

如果你需要更花哨的东西,你可能不得不求助于暴力.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读