![如何实时显示每秒添加到文件的行数?](https://linux22.com/image/180784/%E5%A6%82%E4%BD%95%E5%AE%9E%E6%97%B6%E6%98%BE%E7%A4%BA%E6%AF%8F%E7%A7%92%E6%B7%BB%E5%8A%A0%E5%88%B0%E6%96%87%E4%BB%B6%E7%9A%84%E8%A1%8C%E6%95%B0%EF%BC%9F.png)
我正在使用多个日志文件的目录。
我试图显示写入每个日志文件的行数的运行计数(定期更新)。
我需要查看每个周期(例如每秒)写入每个文件的行数,按文件名索引。
对于奖励积分,应按每秒写入的行数的降序对行进行排序。
这不必使用类似的东西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