【问题标题】:how to continuously display a file of its last several lines of contents如何连续显示最后几行内容的文件
【发布时间】:2013-01-14 07:00:33
【问题描述】:

我正在尝试找到一个关于如何连续显示文件最后几行内容的 Unix 命令(可能是组合)。但是在这个显示过程中,我希望滚动内容到达屏幕顶部时,某些顶行总是显示在屏幕顶部。

这可能吗?

  1. 假设我有文件“job.sta”,前两行是:
    job name, John's job on 2013-Jan-30,...
    Tab1, Tab2, Tab3
    0, 1, 2,
    1, 90, 89
    2, 89, 23
    ...
    
  2. 这个文件正在运行,它的内容正在增长,我不知道它会在哪一行结束。
  3. 所以当更新内容到达 Unix shell 屏幕顶部时,我想在使用 tail 命令时显示(总​​是)前 2 行。我目前正在使用 PuTTY。

参考: http://www.unix.com/unix-dummies-questions-answers/172000-head-tail-how-display-middle-lines.html

【问题讨论】:

  • 我不认为这可以通过简单的 shell 命令来完成。如果我错了,请纠正我。您要求将屏幕分成两部分,上部分显示固定的 2 行(该会话中新添加的 2 行),下部分显示类似 tail -f ... 它看起来有点像 top 命令。不是原地改变而是滚动。

标签: linux unix split screen tail


【解决方案1】:

我一直使用这个功能来监控另一个终端窗口中的日志文件。

tail -f <filename>

我建议向前迈出一步,在日志中查找特定文本。如果您只对看到某些特定条目写入文件感兴趣,那就太好了。

tail -f <filename> | grep <keyword or pattern>

【讨论】:

    【解决方案2】:

    这将每 2 秒更新一次,而不是在将数据写入文件时更新,但也许这样就足够了:

    watch 'head -n 2 job.sta; tail job.sta'
    

    【讨论】:

    • 我尝试并测试了这是适合我目的的最佳答案。非常感谢。还要感谢所有其他回复。我也非常感谢您的帮助。
    • 嗨,兄弟,根据您的最佳答案,我有一个新问题。如何编写自定义命令,例如 watch2。它运行如下: $>watch2 job.sta 因此,它将从命令行参数中获取文件名。我已经尝试了很多。但我对引号符号很生气。你有什么需要阐明的吗?
    • watch2() { head -n 2 "$1"; tail "$1"; }
    • 我就是喜欢 SE!
    【解决方案3】:

    您可以使用screen 来模拟预期的行为:

    1. 运行screen,按空格

    2. Ctrl+a 然后按 S 来分屏。

    3. 通过按 Ctrl+a 然后按 :resize 4 来调整顶部窗口的大小。

    4. 在顶部窗口的提示中,输入head -n2 file

    5. Ctrl+a 然后按 Tab 移动到底部窗口。

    6. Ctrl+a 然后按 c 开始一个新的屏幕会话。

    7. 在新提示中,输入tail -f file

    【讨论】:

    • 这种方法似乎也是一种解决方案,虽然步骤相当多。我也喜欢!谢谢!
    【解决方案4】:

    我用这个脚本来实现你描述的效果

    !#/bin/bash
    while [ 1 ]; do ls -lt data | head -n 30; sleep 3; echo -en "$(tput cuu 30; tput ed)"; done
    

    这会在循环中运行一个命令,并在每次迭代之前从屏幕上删除输出的最后几行。

    在你的情况下,它看起来像

    !#/bin/bash
    
    while [ 1 ] ;# loop forever
    do 
        head -n 2 job.sta ;# display first 2 lines 
        tail -n 30 job.sta ;# display last 30 lines from file
        sleep 3 ;# wait a bit
        echo -en "$(tput cuu 32; tput ed)" ;# delete last 32 lines from screen
    done
    

    当然在你的文件达到 30 行之前有点难看

    希望有帮助

    【讨论】:

      【解决方案5】:

      您想要multitail 程序,它不仅可以分屏,还可以进行颜色编码。

      http://www.vanheusden.com/multitail/

      【讨论】:

        【解决方案6】:

        你试试下面的组合 tail -f 文件名 |头-2

        【讨论】:

        • 不,这不是 OP 想要的“当滚动内容到达屏幕顶部时,我希望某些顶行始终显示在屏幕顶部。”
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        • 2018-10-09
        • 2020-06-23
        • 2012-10-20
        • 2011-09-02
        相关资源
        最近更新 更多