shell 计算统计程序的执行耗时,使用date和printf,输出格式为h:02m:02s.09nanoseconds

Linux种类繁多,命令支持可能不完整,因此应当尽量少用环境依赖。

该脚本编写时是在某一docker容器内执行的,主要使用了date和printf,注意这两个命令是否适配。

支持了时间差的计算,并将输出格式化为时分秒和 nanoseconds 。

calc-time-delta.sh :

#!/bin/bash

# # $* : 参数列表
# echo $*
# # $# : 参数个数
# echo $#
# 
# # date +"%F %T.%N" : 输出完整时间。%N:nanoseconds,9位,0补充。
# echo $(date +"%F %T.%N")
# # 转换时间戳。不含nanoseconds。
# echo $(date -d@123 +"%F %T")
# 
# # $[...] : 数学计算
# echo $[1234 + 567]
# 
# # printf -v VAR ... : 格式化输出到VAR
# printf -v VAR "%d.%09d" 123 456; echo ${VAR}
# 
# # 单行显示
# VCMD=$*; VBEFORE=$(date +"%F %T.%N"); ${VCMD}; echo "after($(date +"%F %T.%N") - before(${VBEFORE})"

echo "calculation processing time."
if [ $# -eq 0 ] ; then
    echo "Usage   : $0 ...";
    echo "example : $0 sleep 1";
    exit
fi;

# process
VCMD=$*;
VBEFORE_INT=$(date +%s%N);
${VCMD}
VAFTER_INT=$(date +%s%N);
printf -v VBEFORE_STR "%s.%09d" $(date -d@$[${VBEFORE_INT} / (1000 * 1000 * 1000)] +"%F_%T") $[${VBEFORE_INT} % (1000 * 1000 * 1000)]
printf -v VAFTER_STR  "%s.%09d" $(date -d@$[${VAFTER_INT}  / (1000 * 1000 * 1000)] +"%F_%T") $[${VAFTER_INT}  % (1000 * 1000 * 1000)]
# 需要手动格式化计算 # to h:02m:02s.09ns
VDELTA_INT=$[(${VAFTER_INT} - ${VBEFORE_INT})]
VDELTA_SECONDS_INT=$[${VDELTA_INT} / (1000 * 1000 * 1000)]
VDELTA_NS_INT=$[${VDELTA_INT} % (1000 * 1000 * 1000)]
printf -v VDELTA_STR "%d:%02d:%02d.%09d" $[${VDELTA_SECONDS_INT} / 60 / 60] $[${VDELTA_SECONDS_INT} / 60 % 60] $[${VDELTA_SECONDS_INT} % 60] ${VDELTA_NS_INT}
echo "delta(${VDELTA_STR}) = after(${VAFTER_STR}) - before(${VBEFORE_STR})"

output :

root@docker-desktop:~# ./calc-time-delta.sh          
calculation processing time.
Usage   : ./calc-time-delta.sh ...
example : ./calc-time-delta.sh sleep 1
root@docker-desktop:~# ./calc-time-delta.sh  sleep 1
calculation processing time.
delta(00:00:01.004122645) = after(2023-11-09_12:15:29.525595899) - before(2023-11-09_12:15:28.521473254)
root@docker-desktop:~# 
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐