Terminal 如何使用bash计算以天、小时和分钟为单位的运行时间?(并很好地打印出来)

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

我想知道从使用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
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的源代码。