shell - 是否有一个 Unix 实用程序可以在标准输入中添加自命令开始以来的时间(以毫秒为单位)?

标签 shell unix

我最终在 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/

相关文章:

linux - 错误退出从上一个错误延迟

linux - 在 Shell 脚本中为每个月的第一个工作日设置 Cron Job

linux - 如何在目录中的文件上运行命令递归地在每个被访问的目录中创建一个新文件(Bash)?

unix - 使用 procmail 通过在 "To"中包含我的名字来过滤电子邮件

ctrl-d 没有停止 while(getchar()!=EOF) 循环

c - Fork 永远不会进入子进程

java - 使用JSCH执行软件远程安装

string - 用于替换文件夹中每个文件中字符串的所有实例的 Unix 命令

linux - TCSH foreach 语法错误 : "(" unexpected

linux - 查看列表中出现的每个文件名的文件内容