Назад | Перейти на главную страницу

Хвост, grep и подсчет экземпляров, найденных в одной команде?

Я отслеживаю вывод файлов и ищу строки с определенными данными. Я не хочу выводить данные на экран, а вместо этого подсчитываю количество найденных экземпляров и отправляю их на экран. Количество экземпляров может прокручиваться и увеличиваться, или оно может перезаписывать существующие и показывать его только по мере увеличения. Эта часть на самом деле не важна, мне просто нужно текущее количество найденных экземпляров.

Моя команда прямо сейчас

tail -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 МБ.

Спасибо за предложение @ sa289 использовать промежуточный файл:

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