2016-03-03 86 views
1

我有一個巨大的logfile1(Linux),日期格式如下&我想提取過去24小時的數據&用shell腳本寫入不同的文件。請幫我完成任務?Shell腳本(提取最近24小時的日誌)

---------- 
03/03/2016 05:40:42 AM QWTRAB1 AMQ7315: Failed to put message to accounting queue. Reason(2053 
---------- 
03/03/2016 05:40:42 AM QWTRAB1 AMQ7315: Failed to put message to accounting queue. Reason(2053 
---------- 
03/03/2016 05:40:46 AM QWTRAB1 AMQ7315: Failed to put message to accounting queue. Reason(2053 
---------- 
03/03/2016 05:40:46 AM QWTRAB1 AMQ7315: Failed to put message to accounting queue. Reason(2053 

回答

1

你可以做同樣的事情到Split access.log file by dates using command line tools

split.awk

{ 
    split($1,array,"[:/]"); 
    year = array[3] 
    month = array[2] 
    day = array[1] 

    print > FILENAME"-"year"_"month"_"day".txt" 
} 

命令:

awk -f split.awk your_log_file.log 
+0

./test.sh + $的awk'BEGIN {\ n個分割( 「一月二月三月四月五月六月七月八月九月十月十一月十二月」,月,「「)\ n作爲(一= 1; a <= 12; a ++)\ nm [months [a]] = a \ n} \ n {\ n split($ 4,array,「[:/]」); \ n year = array [3] \ n month = sprintf(「%02d」,m [array [2]])\ n \ n print> /apphome/mqm/logs/NewFile"-"year"_"month".txt"\n}'/ apphome/mqm/logs/MQLOGS.OUT.0303160800.txt awk:cmd。行:10:(FILENAME =/apphome/mqm/logs/MQLOGS.OUT.0303160800.txt FNR = 1)致命:除零試圖 – Krishna

+0

@Krishna,我已經更新了我的答案。如果您的日誌文件中真的有'------'行,您必須先將它們過濾出來... – MaxU

0

嘗試awk命令提供的日期範圍

awk '$0 >= "03/03/2016 05:40" && $0 <= "03/02/2016 05:40"' 

UPDATE:

​​3210

如果你想要得到的日誌前一天。你可以每天運行一次crontab腳本。將給定的腳本保存在一個名爲logparser.sh的文件中。提供主日誌文件作爲參數。您可以使用以前的日期在新的日誌文件名稱中找到解析的數據。

嘗試$./logparser.sh logfilename.log

+0

我想每天都用cron作業做這件事 – Krishna

+0

@Krishna我已經更新了答案。你可以運行這個腳本作爲crontab! – Rocoder

+0

看起來像它不給在寫格式輸出 – Krishna