Answers:
pv是您的命令!P IPE V iewer约通过它的数据,并且可以在管道运行在任何地方,因为它的管道标准输入直接到标准输出打印统计。例如:
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命令则连续更新。
pv为(不是我所为的awk)目的而建立的,但是当然有可能。假设twilight stream --timeout 5有一条命令将从Twitter Spritzer进行采样5秒钟,然后退出:RATE="$(twilight stream --timeout 5 | pv --line-mode --rate --force 2>&1 1>/dev/null | tr -s '\r\n' '\n' | tail -1)",然后echo $RATE生成类似“ [40.8 / s]”的内容(请注意附加--force标志,因为pvs stderr不再是TTY)。
> /dev/null显示,表明输出现在已“分块”,并且不再流畅地传输。也许unbuffer某些生产程序需要使用它们,以使它们在检测到通过管道传递时不会切换到块输出缓冲?
也许您应该尝试logtop?
tail -f foobar.log |logtop