是否有一个 Unix / Linux 命令可以从标准输入计算每秒的行数?

是否有一个 Unix / Linux 命令可以从标准输入计算每秒的行数?

我正在尝试从日志文件中计算每秒的 SQL 查询数,并且我想通过将 grep 的标准输出传送到某个命令中来实时执行此操作。(我正在做一些性能测试)

我可以自己写,但我确信这会存在。

我看了看 wc,但没有看到允许这样做的选项。

我还可以通过从访问日志中传输尾部来使用它来计算每秒的请求数。

答案1

pv是你的命令!艾佩iewer 打印通过它的数据的统计信息,并且可以在管道中的任何位置运行,因为它将 stdin 直接传输到 stdout。例如:

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

pv命令将当前每秒的行数(默认值为每秒字节数)打印到 stderr,对于此特定数据源(Nginx 的默认日志文件),这相当于每秒传入的 Web 请求数。我只关心计数,因此我将 stdout 导入/dev/null。还有以下选项:

  • -b(总行数),
  • --average-rate(自开始以来的平均利率),以及
  • --timer(追踪管道运行的时间)。

如果您不说--line-mode,它将计算字节数,这可能不是您想要的服务器日志,但在其他地方可能会很方便。

最后说明:... | pv -lb > file.txt与非常相似... | tee file.txt | awk '{printf "\r%lu", NR}',这对于计算行数也很方便,但是调用方式pv更短,尽管输出并不那么令人兴奋——pv默认情况下每秒更新一次,而该awk命令会持续更新。

答案2

也许你应该尝试一下logtop

tail -f foobar.log |logtop

答案3

watch -n 3 "wc -l logfile"

手册页

watch - 定期执行程序,全屏显示输出 默认情况下,程序每 2 秒运行一次;使用 -n 或 --interval 指定不同的间隔。

答案4

如果您所在的系统无法安装pvlogtop按照上述方法操作,并且日志文件太大而无法读取整个文件wc,那么您可以对其进行尾部监视:

MYLOGS=$(timeout 10 tail -f /path/to/log.log)
expr $(echo "$MYLOGS" | wc -l) / 10

相关内容