2014-06-17 94 views
4


我使用命令grep文件的內容,並做一些事情。
但是,文件大小每秒都在持續增長。 (將大於500MB)
由於性能問題,我想grep文件內容的最後N行而不是 整個文件內容。
在shell腳本的最後n行搜索文件內容

if grep -q "SOMETHING" "/home/andy/log/1.log"; then 
    ps -ef | grep "127.0.0.1:50000" | awk '{print $2}' | xargs kill; cat /dev/null > /home/andy/log/1.log 
fi 

如何修改劇本到grep在最後N行文件內容?
謝謝!

+0

只需使用'tail'並將其輸出到'grep'。 – ooga

回答

8

您可以使用tail -n來獲取文件的最後n行。

所以,你如果你想只在最後100行看,你可以使你的腳本的工作是這樣的:

if tail -n 100 "/home/andy/log/1.log" | grep -q "SOMETHING"; then 
... 
+0

太棒了,它的作品! – Andy

2

另一種方法是現在比較文件大小與過去並使用tail -c獲得在字符(字節)之差

# prev_size is known 
curr_size=$(stat -c %s file.log) 
if tail -c $((curr_size - prev_size)) | grep -q pattern; then ... 
    # ... 
fi 
prev_size=$curr_size 
# loop 

這樣你更確信你不會錯過任何東西,或grepping太多。

+0

一個優雅的解決方案!謝謝!! – Andy