我正在使用多个日志文件的目录。
我试图显示写入每个日志文件的行数的运行计数(定期更新)。
我需要查看每个周期(例如每秒)写入每个文件的行数,按文件名索引。
对于奖励积分,应按每秒写入的行数的降序对行进行排序。
这不必使用类似的东西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 -f
与awk
and一起使用logtop
:
tail -f * | awk '/^==> / {a=substr($0, 5, length-8); next} {print a}' | logtop