使用“tail”跟踪文件而不显示最近的行

rid*_*elf 7 linux command-line tail

我想使用像 tail 这样的程序来跟踪正在写入的文件,但不显示最近的行。

例如,当关注一个新文件时,当文件少于 30 行时,不会显示任何文本。写入文件超过 30 行后,行将从第 1 行开始写入屏幕。

因此,当第 31-40 行写入文件时,第 1-10 行将写入屏幕。

如果没有简单的方法可以用tail来做到这一点,也许有一种方法可以在每次第一个文件扩展一行时将第一个文件的前一行写入新文件,并将新文件的尾部写入......

Sté*_*las 8

与@muru 相同,但使用模运算符而不是存储和删除:

tail -fn+1 some/file | awk -v n=30 '
   NR > n {print s[NR % n]}
   {s[NR % n] = $0}
   END{for (i = NR - n + 1; i <= NR; i++) print s[i % n]}'
Run Code Online (Sandbox Code Playgroud)


mur*_*uru 7

也许用 awk 缓冲:

tail -n +0 -f some/file | awk '{b[NR] = $0} NR > 30 {print b[NR-30]; delete b[NR-30]} END {for (i = NR - 29; i <= NR; i++) print b[i]}'
Run Code Online (Sandbox Code Playgroud)

awk 代码,展开:

tail -n +0 -f some/file | awk '{b[NR] = $0} NR > 30 {print b[NR-30]; delete b[NR-30]} END {for (i = NR - 29; i <= NR; i++) print b[i]}'
Run Code Online (Sandbox Code Playgroud)

  • @ridthyself,你的`awk` 必须是`mawk`,尝试切换到`gawk` 或传递`-W 交互` 选项。 (2认同)