我如何将“系统正常运行时间:2天,9小时,16分钟,5秒”转换为紧急日期?
我想将此日期与另一个日期进行比较。
事先谢谢。
假设消息将始终在固定位置包含所有日期成分,则可以使用Unix时间戳(历时秒)进行计算。
# Set t from command, or file.
t="System uptime: 2 days, 9 hours, 16 minutes, 5 seconds"
# Split into words
read -a p <<< "$t"
# Uptime in seconds
uptime=$((p[2]*24*60*60+p[4]*60*60+p[6]*60+p[8]))
now=$(date '+%s')
up_ts=$((now-uptime))
echo "Timestamp: $up_ts"
# Convert to human readable date.
up_date=$(date +'%Y-%m-%d %H:%M:%S' -d "@$up_ts")
echo "Date: $up_date"
您还可以在'up_ts'上使用bash内置日期格式。
如果正常运行时间消息的格式取决于值(例如,正常运行时间<1天,则不包括天数,则需要进行其他解析。
如果要比较正常运行时间,最好的方法是将其转换为秒或从/proc/uptime
中读取:
[
/proc/uptime
此文件包含两个数字:系统的正常运行时间(秒)来源:
man proc
] >>$ awk '{print $1}' /proc/uptime 3141393.94
这应该足以比较正常运行时间,并且比任何无意义的随机日期格式都容易得多。
如果您想知道该系统的确切启动日期,可以执行
$ uptime -s
2019-09-09 06:28:40
注意,uptime
命令从/proc/uptime
获取数据