SharkIng
V2EX  ›  问与答

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

  •  
  •   SharkIng · Aug 8, 2016 · 2580 views
    This topic created in 3740 days ago, the information mentioned may be changed or developed.
    现在做法是 tial -f | while read line. 但是同事说这样不太好,因为这个 Script 需要基本上每 1 个小时运行一次,读取一个 Log 文件然后判断最后 5 行包不包含某程序运行结束的记录

    求解
    9 replies  •  2016-08-11 10:56:40 +08:00
    beyond_st
    beyond_st
    Aug 8, 2016
    1
    你这个因为并不能解释为什么不太好。
    27
    27
    Aug 8, 2016
    2
    tail -n 5 file 不行?
    ryd994
    ryd994
    Aug 8, 2016 via Android
    3
    看不出有什么不好
    uuspider
    uuspider
    Aug 8, 2016
    4
    tail 不加-f ,使用 crontab ,你同事是不是这个意思?
    Fedor
    Fedor
    Aug 8, 2016
    5
    @27 LZ 的意思应该是当文件内容有更新的时候, 依然是最后的 N 行.
    SharkIng
    SharkIng
    OP
    Aug 8, 2016
    6
    @beyond_st
    @ryd994
    我的理解是 while 容易进入死循环种种,说实话我也不知道为什么不好


    @Fedor 对,是需要这样
    @uuspider 同时一再强调不能用 loop ,这个才是蛋碎的地方
    DravenJohnson
    DravenJohnson
    Aug 9, 2016
    7
    python:
    ```
    files = reversed(open(LOGFILE, 'r').readlines()[-10:])
    for line in files:
    jsons = json.loads(line)
    ```
    uuspider
    uuspider
    Aug 10, 2016
    8
    @SharkIng 直接用 grep 吧。
    SharkIng
    SharkIng
    OP
    Aug 11, 2016
    9
    @uuspider 因为是多行处理, Grep 好像没办法做到要求,最后用 Python 写了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2399 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:35 · PVG 23:35 · LAX 07:35 · JFK 10:35
    ♥ Do have faith in what you're doing.