Shell-Script
如何“尾隨”日誌文件,一次 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。這讓我非常接近我想要的,但這似乎是一種“幼稚”的方法。希望有人有更優雅的解決方案。
您可以使用 以 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 行。