我想要一個更有效的方式讓我的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