从日志文件中记录计数

从日志文件中记录计数

我有一个名为的文件output.log,其中包含以下内容:

Thread started
Thread finished
Thread started
Thread finished
Thread started
Thread started

我使用以下方法监视其输出:

tail -f output.log

我想编写一个命令来记录当前正在运行的线程数。对于上述情况,输出将是:

2 threads are running

我是否应该使用 grep 并以某种方式记录字符串实例?

答案1

您可以用来awk进行计数。不过,如果没有更复杂的事情,你可以使用

tail -f output.log | awk '/Thread started/{n++}/Thread finished/{n--} END { printf ("%d Threads are running\n", n)}' output.log

更好的是,使用watch如下:

watch -n.2 -x awk '/Thread started/{n++}/Thread finished/{n--} END { printf ("%d Threads are running\n", n)}' output.log

那里-n.2将刷新0.2s屏幕顶部出现的每一个。

答案2

您可以尝试以下bash脚本:

#!/bin/bash
start_count=$(grep -c "started" /path/to/output.log)
finish_count=$(grep -c "finished" /path/to/output.log)
echo "$((start_count - finish_count)) threads are running"

这会考虑任何先前运行的超出 的可打印范围的线程tail -f。这里我们统计了文件中“started”和“finished”的出现次数,然后简单地减去这些值即可得到结果。如果您希望选择任何范围的行(例如tail -30 /path/to/output.log)来读取而不是整个文件,然后根据这些行查找结果。

答案3

尝试运行这个脚本,

a=$(grep started output.log | wc -l)

b=$(grep finished output.log | wc -l)

echo Total Running threads: "$[$a-$b]"

创建一个 bash 脚本并将以上行粘贴到其中。您将获得正在运行的线程。

相关内容