Grep

從日誌文件中保留一個計數

  • March 11, 2015

我有一個名為的文件output.log,其中包含以下內容:

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

我使用以下方法監視其輸出:

tail -f output.log

我想寫一個命令來計算現在有多少執行緒正在執行。對於上述情況,輸出將是:

2 threads are running

我是否應該使用 grep 並以某種方式記錄字元串實例?

你可以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

您可以嘗試以下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)來讀取而不是整個文件,然後考慮這些行來查找結果。

引用自:https://unix.stackexchange.com/questions/189515