我正在使用 BASH 制作一个脚本,该脚本从文件 (~/logs/Server_Info.log) 中获取时间戳。具体来说,我想从时间戳中提取小时数字并将其记录到变量中。
这是我用于时间戳的格式:
date +"%b-%d-%Y-%I:%M:%S %p"
我使用这个脚本来提取数据:
#!/bin/bash
LAST_HOUR="$(( $(date +%I) - 1 ))"
SEARCH_STRING=$(date +"%b-%d-%Y-${LAST_HOUR}:")
timeval=$(grep "${SEARCH_STRING}" ~/logs/Server_Info.log)
echo "$timeval"
exit 0
然而,每当我执行这个脚本时,我要么得到两个答案:
空白输出
-或者-
04
这是完全错误的,因为我的时间戳是
Mar-24-2017-05:07:00 PM
答案1
对于 awk,它是这样的:
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4}') && echo $var
04
$ var=$(date +"%b-%d-%Y-%I:%M:%S %p" | awk -F[-:] '{print $4 - 1}') && echo $var
3
答案2
日志文件包含 2017-03-15T08:00:23.698411Z 格式的日期格式。如果此时间采用 UTC 格式,即 2017-03-15T08:00:23.698411Z(时间和日期为 08:00:23 和 2017-03-15),则需要将其转换为 IST。最后一小时使用以下命令
date -d '2017-03-15T08:00:23.698411Z last hours' -u +%s
1489561223
date -d @1489561223 +"%Y/%m/%d-%H:%M:%S"
2017/03/15-07:00:23
想要回到 2 小时前,则使用“2 小时前”而不是“最后几个小时”。
注意:- 我在 Linux 服务器中运行上述命令,并且我的 Linux 服务器计时是 UTC。如果您想在 IST Linux 服务器中运行上述命令,那么您必须再添加 5 小时 30 分钟(例如:-“6 小时 30 分”)分钟前”而不是“最后几个小时”)。