Terminal 如何使用bash计算以天、小时和分钟为单位的运行时间?(并很好地打印出来)
我想知道从使用shell(Terminal 如何使用bash计算以天、小时和分钟为单位的运行时间?(并很好地打印出来),terminal,Terminal,我想知道从使用shell(bash)到某个特定时间已经过去了多少天、多少小时和多少分钟awk似乎是正确的工具,因为我需要计算、格式化并打印到命令行 预期产出: "Elapsed Time: " "Days: 3123" "Hours: 12" "Minutes: 23" 算法思想: time_now = get_time() time_then = some_constant diff = time_now - time_then # this is all in seconds
bash
)到某个特定时间已经过去了多少天、多少小时和多少分钟awk
似乎是正确的工具,因为我需要计算、格式化并打印到命令行
预期产出:
"Elapsed Time: "
"Days: 3123"
"Hours: 12"
"Minutes: 23"
算法思想:
time_now = get_time()
time_then = some_constant
diff = time_now - time_then # this is all in seconds
days = round( diff / 86400 ) # to nearest floor integer
print( days )
diff -= diff - (days*86400)
hours = round( diff/3600 )
print (hours)
diff = diff - (hours*3600)
minutes = round( diff/60 )
print( minutes )
如何在awk中执行此操作?我想到了这个:
date +%s | awk '{time_then = 815002800; diff = $1-time_then}; {print (diff/86400)}' | sed 's/\.[1-9]*//' | awk '{print "Days: " $0 }'
sed删除小数点后的数字。始终将数字向下舍入(因此它是一个整数)
那我怎么能把时间和分钟塞进里面呢?感觉一定有更好的办法。也许我使用了错误的工具?您的算法可以直接用awk表示:
date +%s | awk '{
time_now = 815002800
time_then = some_constant
diff = time_now - time_then # this is all in seconds
days = int(diff / 86400) # to nearest floor integer
print days
diff -= days * 86400
hours = int(diff/3600)
print hours
diff -= hours*3600
minutes = int(diff/60)
print minutes
}'
```
将打印
9432
21
40
哇!awk比我想象的灵活得多。但是你认为有没有一种更简单的方法可以做到这一点?你可以预先计算一些常数,使用模运算,或者循环。请看strftime的源代码。