Linux

跟踪、grep 併計算在一個命令中找到的實例?

  • July 23, 2015

我正在跟踪文件輸出並查找具有某些數據的行。我不想將數據輸出到螢幕,而是計算它找到的實例數並將其發送到螢幕。實例的數量可以滾動和增加,或者它可以覆蓋現有的並且僅在它增加時顯示它。那部分並不是很重要,我只需要找到一個執行中的實例數。

我現在的命令是

尾 -f 日誌文件 | grep ‘我想要的數據’

我曾嘗試使用 grep -c 和 wc -l 但沒有給我想要的結果。這個特定的 Linux 發行版沒有 pv 並且無法獲得它。有沒有辦法我可以做到這一點?

GNU awk 可以很容易地做到這一點。

滾動輸出:

tail -f logfile | grep 'stuff to grep for' | awk '{++i;print i}'

您也可以省略 grep 並改用 awk 的正則表達式:

tail -f logfile | awk '/stuff to grep for/ {++i;print i}'

對於單行輸出,您可以預先添加一個 CR,使其再次從行的前面開始(在控制台上工作):

tail -f logfile | awk '/stuff to grep for/ {++i;printf "\r%d",i}'

總是有可靠的watch選擇:

watch -d grep -c "string" /path/to/file 

當您的文件大小超過 100 MB 時,這是理想的選擇。

感謝@sa289 建議使用中間文件:

tail -f /path/to/file |grep "string" > /tmp/intermediate-file &
watch -d grep -c "string" /tmp/intermediate-file

引用自:https://serverfault.com/questions/708021