Shell-Script

如何“尾隨”日誌文件,一次 X 行

  • July 22, 2020

我有一個每秒生成數百行的日誌文件——比如說,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。這讓我非常接近我想要的,但這似乎是一種“幼稚”的方法。希望有人有更優雅的解決方案。

您可以使用 以 M 秒為間隔查看最後 N 行watch。假設 N=20 和 M=3,

watch -n3 tail -n20 logfile.txt

顯然,隨著更新間隔超過寫入間隔,您將失去大量輸出,但據我了解,這就是您想要的。

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 行

引用自:https://unix.stackexchange.com/questions/599603