2009-09-01 39 views
0

此zgrep命令輸出包含黃字的線的特定字段中給出一個巨大的輸入日誌文件時對所有24小時2月26日1989年執行zgrep遞歸在Linux中

zgrep 'yellow' /color_logs/1989/02/26/*/1989-02-26-00_* | cut -f3 -d'+' 

1)我更喜歡使用perl腳本。使用bash腳本有什麼好處嗎?

而且寫這個劇本的時候,我想爲它處理數據的每一天後創建一個文件(所以它會看所有的時間在一天)

zgrep 'yellow' /color_logs/1989/02/*/*/1989-02-26-00_* | cut -f3 -d'+' 

2)我怎樣在處理了一天的數據後,確定第一顆星星的值(使用Perl),以便我可以輸出帶有YYMMDD名稱的文件。我有興趣從這個問題正上方的代碼行中獲得第一顆星的價值。

回答

1

grep寫出文件,該行來自哪裏,但你的切割命令扔掉了。你可以這樣做:

open(PROCESS, "zgrep 'yellow' /color_logs/1989/02/*/*/1989-02-26_* |"); 
while(<PROCESS>) { 
    if (m!/color_logs/(\d\d\d\d)/(\d\d)/(\d\d)/[^:]+:(.+)$!) { 
     my ($year, $month, $day, $data) = ($1, $2, $3, $4); 
     # Do the cut -f3 -d'+' on the line from the log 
     my $data = (split('+', $data))[2]; 
     open(OUTFILE, ">>${year}${month}${day}.log"); 
     print OUTFILE $data, "\n"; 
     close(OUTFILE); 
    } 
} 

這是在你打開和關閉文件的每一行效率不高,你可以使用一個IO :: File對象,而不是當日期改變只開,但你這個想法。