gpt4 book ai didi

linux - 将 pv 输出重定向到文件

转载 作者:太空狗 更新时间:2023-10-29 11:27:24 24 4
gpt4 key购买 nike

我正在使用 pv 实用程序来评估将日志条目添加到日志文件中的速度,如下所示:

tail -f -n 0 mylog.log | pv -lr -t -i 5 > /dev/null

这会输出添加速度并每 5 秒刷新一次:

0:00:05 [  10/s]

现在,我想将当前值(“10”)重定向到一个文件并每 5 秒刷新一次。不附加它,只是覆盖文件中的先前值。关于如何重定向到文件的任何想法?我是 unix 的新手,还没有开始工作。

谢谢!

最佳答案

pv 正在将其诊断写入 stderr,因此您可以开始:

tail -f -n 0 mylog.log | pv -lr -t -i 5 > /dev/null 2> output-file

这只是追加,因此输出文件将以所有行结束的数据结束,回车没有换行。 (目前我无法访问 pv,所以这都是推测。)要获得您想要的数据,请尝试一些简单的后处理:

tail -f mylog.log | pv -lr -t -i 5 2>&1 > /dev/null | 
tr /\\r \ \\n | tr -d [] | while read stamp value;
do echo $value > output-file; done

上面的 shell 技术允许您将 stderr 定向到管道中以进行后处理。像你一样使用 tail 有点奇怪,而 pv 对此有点矫枉过正。如果你有这么长的延迟(5 秒是时间),在每次迭代中使用 wc 并做减法可能是可以接受的:

echo 0 > output-file
while sleep 5; do
expr $(wc -l < mylog.log) - $(cat output-file) > output-file
done

请注意,这会打印出 5 秒内的差异,而不是每秒的速率。 expr 不能很好地处理非整数运算,因此除以 5 是有问题的。您可以使用 bcdc 来获得更高的精度,但您最好甚至不做减法,只是每隔几秒将总行数写入文件.

关于linux - 将 pv 输出重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20801357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com