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

Есть ли команда Unix / Linux для подсчета строк в секунду из stdin?

Я пытаюсь подсчитать количество SQL-запросов в секунду из файла журнала, и я хочу делать это в реальном времени, передавая stdout из grep в какую-то команду. (Я провожу тестирование производительности)

Я мог бы написать это сам, но думал наверняка, что это будет.

Я посмотрел на wc, но не нашел возможности разрешить это.

Я также мог бы использовать его для подсчета запросов в секунду, передавая хвост из журнала доступа.

pv твоя команда! пипе Viewer печатает статистику о данных, проходящих через него, и может работать в любом месте вашего конвейера, поскольку он передает stdin напрямую в stdout. Например:

tail -f /var/log/nginx/access.log | pv --line-mode --rate > /dev/null

В pv команда выводит в stderr текущее количество строк в секунду (по умолчанию - байтов в секунду), что для этого конкретного источника данных (файл журнала Nginx по умолчанию) соответствует входящим веб-запросам в секунду. Меня интересует только счетчик, поэтому я передаю stdout в /dev/null. Также есть такие варианты, как:

  • -b (общее количество строк),
  • --average-rate (средняя скорость с момента запуска), и
  • --timer (отслеживает, как долго шла труба).

Если ты не скажешь --line-mode, он будет считать байты, что, вероятно, не то, что вам нужно для журналов сервера, но может пригодиться в другом месте.

Заключительное примечание: ... | pv -lb > file.txt очень похоже ... | tee file.txt | awk '{printf "\r%lu", NR}', что также удобно для подсчета строк, но pv звонок намного короче, хотя результат не такой захватывающий - pv обновляется каждую секунду по умолчанию, в то время как awk команда постоянно обновляется.

Может тебе стоит попробовать logtop ?

tail -f foobar.log |logtop
watch -n 3 "wc -l logfile"

страница руководства

смотреть - периодически выполнять программу, выводя ее в полноэкранный режим. По умолчанию программа запускается каждые 2 секунды; используйте -n или --interval, чтобы указать другой интервал.

watch -n 5 "mysqladmin status | awk -F'  ' '{ print \$NF }'"