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
标志,因为pv
s stderr
不再是TTY)。
> /dev/null
显示,表明输出现在已“分块”,并且不再流畅地传输。也许unbuffer
某些生产程序需要使用它们,以使它们在检测到通过管道传递时不会切换到块输出缓冲?
也许您应该尝试logtop
?
tail -f foobar.log |logtop