[SHELL] 如何在不使用 tail -f 以及 While 等 Block loop 的时候逐行读取某 Log 文件的最后 N 行?

2016-08-08 12:46:02 +08:00
 SharkIng
现在做法是 tial -f | while read line. 但是同事说这样不太好,因为这个 Script 需要基本上每 1 个小时运行一次,读取一个 Log 文件然后判断最后 5 行包不包含某程序运行结束的记录

求解
1702 次点击
所在节点    问与答
9 条回复
beyond_st
2016-08-08 13:15:51 +08:00
你这个因为并不能解释为什么不太好。
27
2016-08-08 13:27:05 +08:00
tail -n 5 file 不行?
ryd994
2016-08-08 13:28:02 +08:00
看不出有什么不好
uuspider
2016-08-08 13:29:59 +08:00
tail 不加-f ,使用 crontab ,你同事是不是这个意思?
Fedor
2016-08-08 22:17:42 +08:00
@27 LZ 的意思应该是当文件内容有更新的时候, 依然是最后的 N 行.
SharkIng
2016-08-08 23:16:49 +08:00
@beyond_st
@ryd994
我的理解是 while 容易进入死循环种种,说实话我也不知道为什么不好


@Fedor 对,是需要这样
@uuspider 同时一再强调不能用 loop ,这个才是蛋碎的地方
DravenJohnson
2016-08-09 03:22:29 +08:00
python:
```
files = reversed(open(LOGFILE, 'r').readlines()[-10:])
for line in files:
jsons = json.loads(line)
```
uuspider
2016-08-10 19:18:15 +08:00
@SharkIng 直接用 grep 吧。
SharkIng
2016-08-11 10:56:40 +08:00
@uuspider 因为是多行处理, Grep 好像没办法做到要求,最后用 Python 写了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/297854

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX