我最终在 NodeJS 中为此编写了一个快速的小脚本,但我想知道是否有一个实用程序可以将文本输入到其中,该实用程序会在每行前面添加一些文本 - 在我的具体情况下,耗时以毫秒为单位自该计划开始以来。理想情况下,使用类似于:
longrunningprocess | prepend-timestamp
这可以帮助进行一些快速调试。
这个问题看起来与 Is there a Unix utility to prepend timestamps to stdin? 非常相似,但不一样,我想添加自程序启动以来的毫秒数,而不是当前时间戳。
这是我使用 NodeJS 的版本:
#!/bin/env node
var moment = require("moment");
process.stdin.resume()
var fullData = "";
var t = +new Date();
process.stdin.on('data', function(data) {
fullData += data;
splitted = fullData.split("\n");
splitted.forEach(function (part) {
if (part === "" ) {
return process.stdout.write("\n");
}
process.stdout.write( (+new Date() - t) + " " + part + "\n");
})
fullData = splitted[splitted.length-1];
});
process.stdout.on('error', function(err) {
if (err.code === 'EPIPE') return process.exit()
process.emit('error', err)
});
如果保留 ANSI 转义(例如查看初始命令的颜色),则可获得奖励积分,
如果精度(例如小数位数)可以配置,那就更好了。
最佳答案
如果您使用的是 Linux,则 ts
command符合要求。
如果您只需要解析到秒,则可以使用 bash:
start=$SECONDS
longrunningprocess | while IFS= read -r line; do
echo "$((SECONDS - start)): $line"
done
$SECONDS
变量提供自 shell 启动以来的秒数。这对于这种持续时间计算非常有用。
好吧,我没有完全理解您的所有要求。这是 Perl 的版本:
atime () {
local precision="${1:-5}"
perl -MTime::HiRes=time -sne '
BEGIN {$start = time}
printf "%.${prec}f %s", (time - $start), $_
' -- -prec="$precision"
}
longrunningprocess | atime 3
演示:
$ { echo foo; sleep 1; echo bar; } | atime
0.00010 foo
0.98499 bar
$ { echo foo; sleep 1; echo bar; } | atime 3
0.000 foo
0.980 bar
关于shell - 是否有一个 Unix 实用程序可以在标准输入中添加自命令开始以来的时间(以毫秒为单位)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35895049/