Хвост, grep и считать экземпляры, найденные в одной команде?
Я отслеживаю вывод файлов и подбираю строки с определенными данными. Я не хочу выводить данные на экран, а вместо этого посчитать количество найденных экземпляров и отправить их на экран. Число экземпляров может быть прокручиваемым и увеличивающимся, или оно может перезаписать существующее и отображать его только по мере увеличения. Эта часть на самом деле не важна, мне просто нужно найти количество экземпляров.
Моя команда сейчас
tail -f logfile | grep "данные, которые я хочу"
Я пытался использовать grep -c и wc -l, но ничего не дало мне результатов, которые я получаю. Этот конкретный дистрибутив Linux не имеет PV и не сможет его получить. Есть ли способ, которым я могу сделать это?
2 ответа
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