我想要一个更有效的方式让我的Perl脚本通过系统日志解析。系统日志的Perl脚本
我的脚本每小时运行一个cron以输出一些统计信息。我注意到它需要近5-10分钟即可完成随着时间的进展(系统日志每天存档),因为日志文件是几个GB的大小和脚本只是简单:
open LOG, $logfile or die "fatal error. Could not open $logfile"
的问题是,最初的价值第一小时的日志是日志中的第一行。随着时间的推移,系统日志中的日志条目的“当前小时”现在来自于,比如行600000到700000.因此,每个小时它变得越来越慢。
一个复杂的方法是根据时间对文件进行grep运行并将结果存储在tmp文件中,然后让我的perl脚本处理tmp文件,然后删除tmp文件并重复。
是否有更多的编程方式来确保我不会每次重读数千行代码?
SK
打开文件所花的时间与它的大小无关。 5或10分钟是很长时间搜索甚至几千兆字节。你能发布实际的搜索代码吗? – Schwern
我在'while(){$ count ++;打印行$ count \ n“'并以每秒5000行的速度递增,但在第7个小时内,我当前小时的日志值为600000-70000行。代码非常长,并且不在框中在这个网络上这么难以移植,因此这是一小段代码,基本上,我不想每小时重读一行1-600000行,我正在检查当前日志的日志值,希望这是有道理的。 –
scryptKiddy
实际的搜索是正确的,在上面的打印后面说'如果($ _ =〜/^$ time_search_str /){...做一些事情' – scryptKiddy