有许多程序(例如ts
)moreutils
和各种 bash 单行命令可以在命令/管道的输出前面加上该行“打印”的时间戳。
但是,是否有一个命令,对于它获取的每一行,都会打印自命令启动以来的时间(和/或第一次看到一行的时间)和当前行?所以它不是打印当前时间,而是打印自该命令启动以来过了多长时间?(以及行)
当运行需要一段时间且产生大量输出的命令时,了解查看该输出的时间会很有帮助。
快速运行一个简单的命令并不困难,但我不想重新发明轮子。
这是在 Ubuntu Linux 系统上。
答案1
以下是一种方法:
#!/bin/bash
SECONDS=0 # it will already be initialized to zero at the start of the script
while read -r line
do
echo "$SECONDS: $line"
done < file # or < <(command)
SECONDS
是一个每秒自动增加的变量。
答案2
嗯,看起来记录不足(部分缺失手册页)选项ts
可以完全按照您的需要进行操作。
从我的系统man ts
:
如果传递了
-i
或开关,则报告增量时间戳而不是绝对时间戳。默认格式更改为,并且和 也可以使用。如果,每个时间戳将是自上一个时间戳以来经过的时间。如果,则使用自程序启动以来经过的时间。-s
ts
"%H:%M:%S"
"%.S"
"%.s"
-i
-s
该
-m
开关使得系统的单调时钟被使用。
当您询问时不确定这些是否存在,但有人说“版权所有 2006”。
例子
cameron@linux:~$ (echo a; sleep 1; echo b; sleep 2; echo c) | ts -i 'delta: %.S' | ts -s 'abs: %.S'
abs: 00.000007 delta: 00.000009 a
abs: 00.973008 delta: 00.972945 b
abs: 02.974591 delta: 02.001582 c