是否有 Unix / Linux 命令来计算 stdin 每秒的行数?

dig*_*igo 30 linux performance

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

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

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

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

chb*_*own 64

pv是你的命令!P IPE V iewer约通过它的数据,并且可以在管道运行在任何地方,因为它的管道标准输入直接到标准输出打印统计。例如:

tail -f /var/log/nginx/access.log | pv --line-mode --rate > /dev/null
Run Code Online (Sandbox Code Playgroud)

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

  • -b (总行数),
  • --average-rate (自开始以来的平均比率),以及
  • --timer (跟踪管道已经运行了多长时间)。

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

最后一点:... | pv -lb > file.txt很像... | tee file.txt | awk '{printf "\r%lu", NR}',它也可以方便地计算行数,但pv调用时间更短,尽管输出并不那么令人兴奋——pv默认情况下每秒更新一次,而该awk命令则不断更新。


小智 15

也许你应该试试logtop

tail -f foobar.log |logtop
Run Code Online (Sandbox Code Playgroud)