在最后n行shell脚本中搜索文件内容

时间:2014-06-17 02:00:08

标签: linux bash shell grep


我使用命令grep文件内容,并做一些事情 但是,文件大小每秒都在不断增长。 (将大于500MB)
由于性能问题,我想在最后N行而不是grep文件内容 整个文件内容。

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

如何修改脚本以在最后N行中grep文件内容?
谢谢!

2 个答案:

答案 0 :(得分:11)

你可以使用tail -n来获取文件的最后n行。

所以,如果你只想查看最后100行,你可以让你的脚本像这样工作:

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

答案 1 :(得分: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

通过这种方式,您可以更加确定自己没有遗漏任何内容,或者过度贪图。