bash – 时间命令的自定义格式

前端之家收集整理的这篇文章主要介绍了bash – 时间命令的自定义格式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在bash脚本中使用time命令来计算脚本的运行时间并将其写入日志文件。我只需要实时,而不是用户和sys。还需要它在一个体面的格式。例如00:00:00:00(不像标准输出)。我喜欢任何建议。

预期格式应为00:00:00.0000(毫秒)[小时]:[分钟]:[秒]。[毫秒]

我已经有3个脚本。我看到一个这样的例子:

{ time { # section code goes here } } 2> timing.log

但我只需要实时,而不是用户和sys。还需要它在一个体面的格式。例如00:00:00:00(不像标准输出)。

换句话说,我想知道如何把时间输出变成更容易处理的东西。

您可以使用date命令获取执行要计时的工作之前和之后的当前时间,并计算差值,如下所示:
#!/bin/bash

# Get time as a UNIX timestamp (seconds elapsed since Jan 1,1970 0:00 UTC)
T="$(date +%s)"

# Do some work here
sleep 2

T="$(($(date +%s)-T))"
echo "Time in seconds: ${T}"

printf "Pretty format: %02d:%02d:%02d:%02d\n" "$((T/86400))" "$((T/3600%24))" "$((T/60%60))" "$((T%60))""

笔记:
$((…))可以用于bash中的基本算术 – 警告:不要在减号前面加空格,因为这可能被解释为命令行选项。

参见:http://tldp.org/LDP/abs/html/arithexp.html

编辑:
此外,您可能需要查看sed以从时间生成输出搜索提取子字符串。

编辑:

定时示例为毫秒(实际为毫微秒,但在此截断为毫秒)。您的版本的日期必须支持%N格式,bash应该支持大数字。

# UNIX timestamp concatenated with nanoseconds
T="$(date +%s%N)"

# Do some work here
sleep 2

# Time interval in nanoseconds
T="$(($(date +%s%N)-T))"
# Seconds
S="$((T/1000000000))"
# Milliseconds
M="$((T/1000000))"

echo "Time in nanoseconds: ${T}"
printf "Pretty format: %02d:%02d:%02d:%02d.%03d\n" "$((S/86400))" "$((S/3600%24))" "$((S/60%60))" "$((S%60))" "${M}"

免责声明:
我原来的版本说

M="$((T%1000000000/1000000))"

但这是编辑出来,因为它显然不适用于一些人,而新版本据报道。我不赞成这个,因为我认为你必须使用剩​​余部分,但被压倒。选择任何适合你。

猜你在找的Bash相关文章