我使用命令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文件内容?
谢谢!
答案 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
通过这种方式,您可以更加确定自己没有遗漏任何内容,或者过度贪图。