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

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

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

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

支持了时间差的计算,并将输出格式化为时分秒和 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:~# 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值