Сохранять счет из файла журнала

У меня есть файл с именем output.log который имеет этот контент:

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

Я контролирую его вывод, используя:

 tail -f output.log 

Я бы хотел написать команду, чтобы подсчитывать, сколько потоков работает прямо сейчас. В приведенном выше случае выход будет выглядеть следующим образом:

 2 threads are running 

Должен ли я, возможно, использовать grep и каким-то образом поддерживать подсчет строк?

  • Как следить и искать в файле, проходящем через фильтр, менее
  • Создайте список каждого пользователя, которому принадлежит файл в заданном каталоге, а также количество файлов и каталогов, которыми они владеют.
  • Как заставить Vim вести себя как «tail -f»?
  • Как активно grep log за последние 15 секунд для фразы?
  • Окрашивание хвостового выхода с помощью perl
  • Как использовать tail -f с grep для отображения окружающих линий
  • Перенаправление вывода GREP в разные текстовые файлы в зависимости от содержимого захвата
  • tail -f не выводит результат в live CD на Ubuntu
  • 3 Solutions collect form web for “Сохранять счет из файла журнала”

    Вы можете использовать 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 . Здесь мы подсчитали появления «start» и «finished» в файле, а затем просто вычтем значения, чтобы получить результат. Если вы хотите, чтобы вы выбирали любой диапазон строк (например, tail -30 /path/to/output.log ), чтобы читать, а не весь файл, а затем находить результат с учетом этих строк.

    Попробуйте запустить этот скрипт,

     a=$(grep started output.log | wc -l) b=$(grep finished output.log | wc -l) echo Total Running threads: "$[$a-$b]" 

    Создайте скрипт bash и вставьте в него указанные выше строки. Вы получите текущие потоки.

    Linux и Unix - лучшая ОС в мире.