我正在尝试找到一个关于如何连续显示其最后几行内容的文件的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
答案 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
来模拟预期的行为:
运行screen
,按空格。
按 Ctrl + a ,然后按 S 分割屏幕。
按 Ctrl + a 然后按:resize 4
调整顶部窗口的大小。
在顶部窗口的提示中,输入head -n2 file
。
按 Ctrl + a 然后按 Tab 移动到底部窗口。
按 Ctrl + a 然后按 c 开始新的屏幕会话。
在新提示中,输入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
程序,它不仅可以进行分屏,还可以进行颜色编码。
答案 5 :(得分:1)
您尝试以下组合 tail -f filename |头-2 -