我有一个名为的文件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 脚本并将以上行粘贴到其中。您将获得正在运行的线程。