我有一个每秒生成数百行的日志文件 - 比如说,12 个特定行,每秒 16×。
我想运行命令行或 shell 脚本来实时整齐地显示此日志文件。但是如果我运行tail -f logfile.txt
,文本会快速滚动到终端窗口之外,并且人眼无法阅读。我还没有掌握命令行,所以这就是我现在能想到的。
我希望终端窗口每次只打印 12 行并自动刷新,例如:
// while ( Ctrl+C hasn't been hit )
// {
// clear terminal window
// print last 12 lines of logfile.txt
// wait until logfile is 12 lines longer
// }
有任何想法吗?
编辑:事实证明我可以做tail -f logfile.txt
,只需将终端窗口高度设置为 12。这让我非常接近我想要的,但这似乎是一种“天真的”方法。希望有人有更优雅的解决方案。
答案1
您可以使用 每隔 M 秒查看最后 N 行watch
。假设N=20且M=3,
watch -n3 tail -n20 logfile.txt
显然,当更新间隔超过写入间隔时,您将丢失大量输出,但据我了解,这就是您想要的。
答案2
Bash >= 4 有一个特殊的内置函数mapfile
:
tail -f logfile.txt | while mapfile -t -n 12 lines && ((${#lines[@]})); do
clear
printf '%s\n' "${lines[@]}"
sleep 0.1 # Might be necessary or you won't see anything at all except the last batch of lines
done
摘自:使用 Bash 一次读取 n 行。
答案3
我喜欢用它less
来查看日志。一些有用的 less 命令:
- G跳到最后一行
- R刷新文件(后跟
G
) - F实时拖尾文件(又名
tail -f
):点击Ctrl+C停止拖尾。
答案4
tail -f logfile.txt | less
您可以使用格伦·杰克曼突出显示的界面进行移动:
- F跟随
- Ctrl-C停止关注
- q退出
- /搜索正则表达式