Linux 将脚本的多个输出转换为一个速率

Linux 将脚本的多个输出转换为一个速率,linux,bash,sh,Linux,Bash,Sh,在进行系统管理时,我经常编写一行程序来获取进程的状态,或一些值,如已使用的磁盘空间、已处理的文件数或剩余的秒数(例如复制)。我使用watch或echo in a loop withdate等工具实时评估状态 通常我知道我观察的值的结果:它将上升到一个定义的数字,或零。为了计算完成的预期时间(某些过程需要几个小时),我将在电子表格中放置一些时间戳和值,计算时间戳之间值的增量或减量,并平均速率和外推以估计过程的预期结束时间 我正在寻找一种自动化的方法,就像对管道这样。我希望它能像这样工作: $ ra

在进行系统管理时,我经常编写一行程序来获取进程的状态,或一些值,如已使用的磁盘空间、已处理的文件数或剩余的秒数(例如复制)。我使用
watch
或echo in a loop with
date
等工具实时评估状态

通常我知道我观察的值的结果:它将上升到一个定义的数字,或零。为了计算完成的预期时间(某些过程需要几个小时),我将在电子表格中放置一些时间戳和值,计算时间戳之间值的增量或减量,并平均速率和外推以估计过程的预期结束时间

我正在寻找一种自动化的方法,就像对管道这样。我希望它能像这样工作:

$ rate --expected-value=0 --interval=10 "mysql -e 'show slave status' -E | grep Seconds_Behind_Master | awk '{print $2}'"
Fri May 31 10:31:48 CEST 2019 | value: 52952
Fri May 31 10:31:58 CEST 2019 | value: 52918 | rate: 3.4/s | ETA: 10:57:27
Fri May 31 10:32:08 CEST 2019 | value: 52886 | rate: 3.2/s | ETA: 10:58:29
或者再举一个例子:

$ rate --unit byte --interval=1 "stat / -f -t | awk '{print $9}'"
Fri May 31 10:58:03 CEST 2019 | value: 11908091
Fri May 31 10:58:04 CEST 2019 | value: 11829190 | rate: 78900 bytes/s

当然,这些都是示例,虚构的
rate
实用程序并不存在。我可以自己构建它,但我想知道是否有一个现有的实用程序(我还没有找到)可以做到这一点,可能是一个库,或者一个简单的单行程序可以做类似的事情。

有。有。一旦你开始写这样的东西,你就会发现有太多的事情要处理。真的在睡觉的时候写一个简单的
;dostat/-f-t | awk'{print$9}';done |{read old;while read new;do echo“$(date)| value:$new | rate:$(new-old)”;old=$new;done;}
只是比使用预定义脚本更易于自定义。@KamilCuk
pv
确实存在并涵盖了许多功能:eta、进度和速率,但仅针对管道中的字节。这是一个不同的用例,在我开始开发类似的工具之前,我试图找到可能的不同解决方案。由于我已经习惯于使用pv,只需将它包含在我的一行代码中,就可以看到发生了什么。这是我在工具箱中错过的一个功能,我不希望每次需要它时都复制相同的逻辑,这可能与最初开发
pv
的原因相同。