【问题标题】:search file content in last n lines of shell script在 shell 脚本的最后 n 行中搜索文件内容
【发布时间】:2014-08-06 22:14:15
【问题描述】:
我用命令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?
谢谢!
【问题讨论】:
标签:
linux
bash
shell
grep
【解决方案1】:
您可以使用 tail -n 获取文件的最后 n 行。
所以如果你只想查看最后 100 行,你可以让你的脚本像这样工作:
if tail -n 100 "/home/andy/log/1.log" | grep -q "SOMETHING"; then
...
【解决方案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
这样你就更确定你没有遗漏任何东西,或者贪婪太多。