如何“尾随”日志文件,一次 X 行

如何“尾随”日志文件,一次 X 行

我有一个每秒生成数百行的日志文件 - 比如说,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退出
  • /搜索正则表达式

相关内容