2014-06-17 68 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