2015-06-18 18 views
2

我試圖讓幾個日誌的作業的輸出文件多一點人性化的在Unix上。相呼應的文字和削減Unix的

日誌文件從Web.log去是最新的高達Web.log.30是最古老的。我從這些文件grepping job123然後輸送至一個新的grep這裏只需要行與退出的消息,這意味着工作已完成。然後我用逗號將其剪下,這樣我只打印出時間戳而不是整行。這裏是我的腳本:

for file in `ls -tr Web.log*`; do grep job123 $file | grep Exit | cut -d "," -f1; done 

它輸出了我,我想時間戳,按時間順序:

2015-06-17 21:07:00 
2015-06-17 22:07:00 
2015-06-17 23:07:00 
2015-06-18 00:07:00 
2015-06-18 01:07:00 
2015-06-18 02:07:00 
2015-06-18 03:07:00 

所有我想要做的就是回聲添加到每一行的說:「劇本開始job123跑在:「所以它看起來像這樣:

Script job123 ran at: 2015-06-17 21:07:00 
Script job123 ran at: 2015-06-17 22:07:00 
Script job123 ran at: 2015-06-17 23:07:00 
Script job123 ran at: 2015-06-18 00:07:00 
Script job123 ran at: 2015-06-18 01:07:00 
Script job123 ran at: 2015-06-18 02:07:00 
Script job123 ran at: 2015-06-18 03:07:00 

當用戶幾乎不認識的Unix,我只需要使它的用戶友好地閱讀。我正在努力迴應。

而且每個日誌文件大約是25MB長,所以管系列中可以消耗內存,因此,如果任何人有超速的事情了任何建議,它的大加讚賞。

注意,這是在生產服務器上,所以在安裝其它腳本一樣multigrep是毫無疑問的。我打算將其作爲單行腳本來使用戶更簡單。

無論如何,我可以重複對我目前使用的腳本文本?我已經嘗試過在幾個階段迴應它,但沒有運氣。

謝謝。

+1

,你可以把它管道進入AWK 。 'ls -tr Web.log *'中的文件。做grep job123 $ file | grep退出| cut -d「,」-f1 | awk'{print'Script job123跑在:「$ 0}';完成 – c4pone

+0

謝謝@ c4pone,你的解決方案是最快的! – iLuPa

+0

不用擔心男人。很高興我能幫上忙 – c4pone

回答

1

重新使用你的代碼,這可以通過與awk -F, '{print "Script job123 ran at: " $1}'

否則相同的替換cut命令(cut -d "," -f1)可與awk單獨實現來實現:

for file in `ls -tr Web.log*`; do awk -F, '/job123/&&/Exit/{print "Script job123 ran at: " $1}' $file; done 
1

Store中的命令在一個可變輸出和打印帶有附加文本:

for file in `ls -tr Web.log*`; do 
    out=$(grep job123 $file | grep Exit | cut -d "," -f1;) 
    echo "Script job123 ran at: ${out}" 
done 

您也可以將二者結合起來的grep的成一種

out=$(grep -E 'job123.*Exit|Exit.*job123' $file) 

如果你可以使用awk那麼它可以簡化以單個命令:

out=$(awk -F, '/job123/&&/Exit/{print $1}' $file) 

由於您必須p屁股每條線,awk解決方案(沒有管道)會更好。但我不能說你會加速多少。