我想通过减去两个时间戳来找出系统的总启动时间。 首先,我使用以下命令获取开始时间和结束时间:
sudo journalctl | grep "Logs begin at" | awk '{print $6" "$7" "$12" "$13}'
为我提供以下输出:
2020-05-21 05:52:47 2020-05-28 19:37:36
(前两个字段是开始时间,后两个字段是结束时间)
现在,我想查找开始时间和结束时间之间的差异,最好采用以下格式:
“ 0年,0个月,7天,HH:MM:SS”
答案 0 :(得分:3)
那呢?
#!/usr/bin/env bash
echo "BASH_VERSION:" $BASH_VERSION
line="2020-05-21 05:52:47;2020-05-28 19:37:36"
IFS=';' read -a dates <<< $line
startDatetime=${dates[0]}
endDatetime=${dates[1]}
echo "| dates -> " ${dates[@]}
echo "|> startDatetime -> ${startDatetime}"
echo "|> endDatetime -> ${endDatetime}"
startTime=$(date -jf "%Y-%m-%d %H:%M:%S" "${startDatetime}" +%s)
endTime=$(date -jf "%Y-%m-%d %H:%M:%S" "${endDatetime}" +%s)
diffSeconds="$(($endTime-$startTime))"
echo "Diff in seconds: $diffSeconds"
# at this point you have the diff in seconds and you can parse it however you want :)
diffTime=$(gdate -d@${diffSeconds} -u +%H:%M:%S) # you'll need `brew install coreutils`
echo "Diff time(H:M:S): $diffTime"
输出:
BASH_VERSION: 5.0.17(1)-release
| dates -> 2020-05-21 05:52:47 2020-05-28 19:37:36
|> startDatetime -> 2020-05-21 05:52:47
|> endDatetime -> 2020-05-28 19:37:36
Diff in seconds: 654289
Diff time(H:M:S): 13:44:49
要安装最新的bash
,我发现this medium post。
注意:例如,如果由于某些版本与date
功能不兼容而导致此方法不起作用,则想法应该非常相似,并且您可以找到适合您当前版本的解决方法, 。从逻辑上讲,我看到的最简单的解决方案是:
1st)将字符串拆分为两个:每个DateTimes一个。
2nd)将每个DateTime从字符串转换为日期。
3rd)在这些日期之间应用差异:使用每个日期之间的秒数。
4th)具有差异秒数,您可以根据需要显示它(年,天,分钟,秒)
答案 1 :(得分:3)
与@chemaclass相同的版本,但是这次是Ubuntu(16.04 LTS)。
#!/usr/bin/env bash
echo "BASH_VERSION:" $BASH_VERSION
line="2020-05-21 05:52:47;2020-05-28 19:37:36"
IFS=';' read -a dates <<< $line
startDatetime=${dates[0]}
endDatetime=${dates[1]}
echo "| dates -> " ${dates[@]}
echo "|> startDatetime -> ${startDatetime}"
echo "|> endDatetime -> ${endDatetime}"
startTime=$(date -d "${startDatetime}" +%s)
endTime=$(date -d "${endDatetime}" +%s)
diffSeconds="$(($endTime-$startTime))"
echo "Diff in seconds: $diffSeconds"
# at this point you have the diff in seconds and you can parse it however you want :)
diffTime=$(date -d @${diffSeconds} +"%H:%M:%S" -u)
echo "Diff time(H:M:S): $diffTime"
输出:
BASH_VERSION: 5.0.0(1)-release
| dates -> 2020-05-21 05:52:47 2020-05-28 19:37:36
|> startDatetime -> 2020-05-21 05:52:47
|> endDatetime -> 2020-05-28 19:37:36
Diff in seconds: 654289
Diff time(H:M:S): 13:44:49
我在this tutorial之后将bash更新为版本5.0.0。
使用默认的bash版本(4.4.20)不起作用。
由于出现了redirection unexpected
符号,因此您会在第3行收到类似<<<
的错误消息。
答案 2 :(得分:0)
可能的方法可能是
#!/bin/bash
strSTARTTIME="2020-05-21 05:52:47"
strENDTIME="2020-05-28 19:37:36"
STARTTIME=$(date -d "${strSTARTTIME}" +%s)
ENDTIME=$(date -d "${strENDTIME}" +%s)
RUNTIME=$((ENDTIME-STARTTIME))
echo "Seconds ${RUNTIME} in sec"
进一步的计算和格式设置,我将在您身边。