Grep
從日誌文件中保留一個計數
我有一個名為的文件
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
)來讀取而不是整個文件,然後考慮這些行來查找結果。