how to continuously display a file of its last several lines of contents

♀尐吖头ヾ 提交于 2019-12-31 10:34:03

问题


I am trying to find a Unix command (combination, maybe) on how to continuously display a file of its last several lines of contents. But during this displaying, I want some of the top lines are always displayed on the screen top when the rolling contents reach the screen top.

Is that possible?

(1) Suppose I have file, "job.sta", the first 2 lines are: job name, John's job on 2013-Jan-30,... Tab1, Tab2, Tab3 0, 1, 2, 1, 90, 89 2, 89, 23 ...

(2) This file is on its running, its contents are growing, and I don't know what line it's going to end.

(3) So I want to display (always) the first 2 lines when using tail command, when the updating contents reaches a Unix shell screen top. I am using PuTTY at the moment.

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


回答1:


This will update every 2 seconds rather than whenever data is written to the file, but perhaps that's adequate:

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



回答2:


I use this function all the time to monitor a log file in another terminal window.

tail -f <filename>

I recommend taking it a step forward to look for particular text in the log. Great if you are only interested in seeing some particular entry being written to the file.

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



回答3:


You can use screen to simulate the expected behaviour:

  1. Run screen, press Space.

  2. Press Ctrl+a followed by S to split the screen.

  3. Resize the top window by pressing Ctrl+a followed by :resize 4.

  4. In the prompt in the top window, enter head -n2 file.

  5. Move to the bottom window by pressing Ctrl+a followed by Tab.

  6. Start a new screen session by pressing Ctrl+a followed by c.

  7. In the new prompt, enter tail -f file.




回答4:


I use this script to achieve the effect you describe

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

This runs a command in a loop, and deletes the last lines of the output from the screen before each iteration.

In your case it would look something like

!#/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

Of course it is a bit ugly before your file reaches 30 lines

Hope that helps




回答5:


You want the multitail program, which not only does the split screen stuff but will also do color-coding.

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




回答6:


You try the following combination tail -f filename | head -2



来源:https://stackoverflow.com/questions/14604397/how-to-continuously-display-a-file-of-its-last-several-lines-of-contents

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!