如何实时显示每秒添加到文件的行数?

如何实时显示每秒添加到文件的行数?

我正在使用多个日志文件的目录。

我试图显示写入每个日志文件的行数的运行计数(定期更新)。

我需要查看每个周期(例如每秒)写入每个文件的行数,按文件名索引。

对于奖励积分,应按每秒写入的行数的降序对行进行排序。

这不必使用类似的东西ncurses(例如像顶部);如果它只是每个周期(例如每秒)写入更新,那就可以了。

我该如何完成这个任务?


我已将我的解决方案作为答案,但我怀疑有更好的方法来做到这一点......希望学习更好的方法!

答案1

我会使用watch(阅读man watch):

watch --differences wc -l *.log

答案2

仅使用强制 Unix 工具的暴力破解方法:

while :; do wc -l *; echo "-"; sleep 1; done |
awk '/^-/{print; next} {print $2, $1, $1-prev[$2]; prev[$2]=$1}'

上面的代码将每秒打印每个文件名,后跟文件中当前的行数以及自上一次迭代以来行数的变化。对于所有文件的总行数也会执行同样的操作。

按摩 awk 输出以适应,您可以通过管道将其按您喜欢的方式排序,并在每次调用之前sort -k3,3n添加 a (或者每次 awk 读取 a 之后的第一行时从 awk 打印相关的转义序列)如果您只是想要查看每次循环的当前输出。tput clear;wc -l-

答案3

我能想到的最好的办法就是tail -fawkand一起使用logtop:

tail -f * | awk '/^==> / {a=substr($0, 5, length-8); next} {print a}' | logtop

这会导致这样的结果: 在此输入图像描述

相关内容