【问题标题】:Retrieve last 100 lines logs检索最后 100 行日志
【发布时间】:2016-08-27 15:10:39
【问题描述】:

我需要从日志文件中检索最后 100 行日志。 我尝试了 sed 命令

sed -n -e '100,$p' logfilename

请告诉我如何更改此命令以专门检索 last 100 行。

【问题讨论】:

标签: linux logging sed


【解决方案1】:

您可以使用tail命令如下:

tail -100 <log file>   > newLogfile

现在最后 100 行将出现在 newLogfile

编辑:

twalberg 提到的最新版本的 tail 使用命令:

tail -n 100 <log file>   > newLogfile

【讨论】:

  • 请注意,tail 的一些更新版本需要语法 tail -n 100 &lt;filename&gt;...
【解决方案2】:

“tail”是显示文件最后一部分的命令,使用适当的可用开关有助于我们获得更具体的输出。对我来说最常用的开关是 -n 和 -f

概要

尾巴 [-F | -f | -r] [-q] [-b 数字 | -c 号码 | -n number] [文件...]

这里

-n 数字: 位置是数字线。

-f : -f 选项导致 tail 在文件结束时不停止 到达,而是等待附加数据附加到 输入。 -f 选项被忽略,如果 标准输入是管道,但如果是 FIFO,则不是。

检索最后 100 行日志

To get last static 100 lines  
     tail -n 100 <file path>

To get real time last 100 lines
     tail -f -n 100 <file path>

【讨论】:

    【解决方案3】:

    看,打印最后 100 行的 sed 脚本,您可以在 sed (https://www.gnu.org/software/sed/manual/sed.html#tail) 的文档中找到:

    $ cat sed.cmd
    1! {; H; g; }
    1,100 !s/[^\n]*\n//
    $p
    
    $ sed -nf sed.cmd logfilename
    

    对我来说,这比你的脚本要困难得多,所以

    tail -n 100 logfilename
    

    要简单得多。而且效率很高,如果没有必要,它不会读取所有文件。查看我对tail ./huge-file 的 strace 报告的回答:https://unix.stackexchange.com/questions/102905/does-tail-read-the-whole-file/102910#102910

    【讨论】:

      【解决方案4】:

      您可以简单地使用以下命令:-

      tail -NUMBER_OF_LINES FILE_NAME

      例如tail -100 test.log

      • 将从 test.log 中获取最后 100 行

      如果你想把上面的输出放在一个单独的文件中,那么你可以如下管道:-

      tail -NUMBER_OF_LINES FILE_NAME > OUTPUT_FILE_NAME

      例如tail -100 test.log &gt; output.log

      • 将从 test.log 中获取最后 100 行并将它们存储到新文件 output.log 中)

      【讨论】:

        【解决方案5】:

        我知道这已经很老了,但是,对于可能有帮助的人来说。

        less +F my_log_file.log

        这只是基本的,用更少的东西你可以做很多更强大的事情。一旦您开始查看日志,您就可以进行搜索、转到行号、搜索模式等等,而且对于大文件来说速度更快。

        它就像日志的 vim[完全是我的意见]

        less 的原始文档:https://linux.die.net/man/1/less

        更少的备忘单:https://gist.github.com/glnds/8862214

        【讨论】:

        • “less”的一个重要特点是它不会将整个文件加载到内存中,因此会指示用它打开大文件。
        【解决方案6】:
        len=`cat filename | wc -l`
        len=$(( $len + 1 ))
        l=$(( $len - 99 ))
        sed -n "${l},${len}p" filename
        

        第一行取文件的长度(总行数) 然后在总行数中 +1 之后我们必须提取 100 条记录,所以总长度为 -99 然后只需将变量放在 sed 命令中即可从文件中获取最后 100 行

        希望对你有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-03
          • 2018-03-28
          • 1970-01-01
          • 2011-10-28
          • 1970-01-01
          • 1970-01-01
          • 2021-09-26
          • 1970-01-01
          相关资源
          最近更新 更多