代码之家  ›  专栏  ›  技术社区  ›  Alex L

Linux文件疯狂-获取日志文件最后一行的奇怪行为

  •  1
  • Alex L  · 技术社区  · 15 年前

    我正在尝试获取文件的最后一行。 文件ff.log在ffmpeg工作时每秒都会获取新数据。 日志文件如下所示:

    帧=20 fps=0 q=7.7大小=40kB时间=1.24比特率=266.1kbits/s
    帧=30fps=28q=6.6大小=51kB时间=1.90比特率=218.4kbits/s


    帧=64 fps=22 q=7.0大小=84kB时间=4.20比特率=163.8kbits/s

    我试过了

    $line = `tail -n 1 $file`;
    

    我尝试将fseek()与一个“ php tail script " .

    两者都导致了一些奇怪的行为。

    我从命令行运行my脚本,它输出:

    帧=XX fps=XX q=XX尺寸=XX 时间=XX比特率=XXkbits/s

    其中XX持续增加数秒,直到它是最后一行的值。

    现在,在我的php脚本中

    echo "--$last_line--";
    

    当我运行它时,输出是几秒钟,只是日志行的数字在增加。当它到达终点时,输出为

    --ame=7119 fps=9 q=13.8大小=4809kB时间=474.50比特率=83.0kbit/s

    请注意,第一个“-”与$last_行冲突,另一个“-”不存在。


    2 回复  |  直到 11 年前
        1
  •  3
  •   Mez    15 年前

    这可能是因为它认为您要求它打印“$lastline--”。。。

    echo '--' . $lastline . '--';
    

    你可能还想做一些类似的事情

    var_dump($lastline); die();
    

    以准确显示变量中的内容,因为这将为您提供更多信息。

    然而,我建议你发布你的整个脚本,这样有人可以尝试看看问题是什么。

    编辑 查看该文件,它似乎仅使用\r作为行终止符。这会导致您看到的问题(这意味着“返回到行的开头”)—这意味着所有日志都显示为最后一行。

    尝试使用he命令

    cat ff.log | tr "\r" "\n" | tail -n 2 | head -n 1
    

    获取日志的最后一行。

        2
  •  0
  •   Devon_C_Miller    15 年前

    tail命令和PHP脚本都有相同的问题。 他们搜索到文件的末尾,返回到前一行的末尾,然后读取并打印从那里到文件末尾的所有内容。

    $line = `tail -n 1 $file | tail -n 1`;
    $line = `tail -n 1 $file | head`;
    

    第一个稍微精确一些,但第二个更快。