如何连续显示其最后几行内容的文件

时间:2013-01-30 12:47:37

标签: linux unix split screen tail

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

这可能吗?

(1)假设我有文件," job.sta",前两行是: 工作名称,约翰在2013年1月30日的工作,...... Tab1,Tab2,Tab3 0,1,2, 1,90,89 2,89,23 ...

(2)此文件正在运行,其内容正在增长,而且我不知道它将要结束的行。

(3)所以我想在使用tail命令时显示(总​​是)前两行,当更新内容到达Unix shell屏幕顶部时。我现在正在使用PuTTY。

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

6 个答案:

答案 0 :(得分:37)

我一直使用此函数来监视另一个终端窗口中的日志文件。

tail -f <filename>

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

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

答案 1 :(得分:16)

这将每2秒更新一次,而不是每当数据写入文件时,但这可能就足够了:

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

答案 2 :(得分:8)

您可以使用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

答案 3 :(得分:3)

我使用此脚本来实现您描述的效果

!#/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行之前,它有点难看

希望有所帮助

答案 4 :(得分:2)

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

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

答案 5 :(得分:1)

您尝试以下组合 tail -f filename |头-2 -