毎秒数百行を生成するログファイルがあります。
このログファイルをリアルタイムできれいに表示するためにコマンドラインまたはシェルスクリプトを実行したいと思います。ただし、 を実行すると、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
答え3
私はそれを使ってless
ログを見るのが好きです。いくつかの便利なlessコマンド:
- G最後の行に移動
- Rファイルの更新(次へ
G
) - Fファイルリアルタイムテーリング(別名
tail -f
):クリックしてCtrl+Cテーリングを停止します。
答え4
tail -f logfile.txt | less
Glenn Jackmanが強調したインターフェースを使って移動できます。
- Fフォローする
- Ctrl-Cフォロー停止
- qやめる
- /正規表現検索