ログファイルを一度にX行ずつ「追跡」する方法

ログファイルを一度にX行ずつ「追跡」する方法

毎秒数百行を生成するログファイルがあります。

このログファイルをリアルタイムできれいに表示するためにコマンドラインまたはシェルスクリプトを実行したいと思います。ただし、 を実行すると、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

Glenn Jackmanが強調したインターフェースを使って移動できます。

  • Fフォローする
  • Ctrl-Cフォロー停止
  • qやめる
  • /正規表現検索

関連情報