linux - shell 脚本: Increment seconds to date printed in logs

标签 linux bash shell date

我在日志文件中将日期和时间打印为“14:09:49.922 UTC 12.08.2015”

要分析少数情况下的日志,我必须从日志中的该日期和时间开始 grep 接下来的 X 秒。

注意:时区可能会有所不同。

我使用 grep 和 for 循环来根据给定时间迭代秒、分钟或小时。

我正在寻找的帮助是 date 命令中增加秒数的选项,这样如果我将 x 秒添加到给定时间戳,则日期、月年、小时、分钟和秒应该相应更新。

例如:23:59:59 UTC 31.12.2015"+ 1 秒应返回“00:00:00 UTC 01.01.2016”。

基本上,我在 date 命令中寻找选项,而不是手动检查秒数是否超过 59,然后增加分钟等等。

如何使用日期实用程序在 shell 脚本中实现此目的?

最佳答案

日期命令不支持“14:09:49.922 UTC 12.08.2015”格式。

所以我转换为“14:09:49.922 UTC 08/12/2015”,然后使用日期实用程序如下

DATE="14:09:49 UTC 12.08.2015"  
NEXT_DATE=`echo $DATE | awk '{ split($3,a,"."); print $1" "$2" "a[2]"/"a[1]"/"a[3]}'`
TIME_ZONE=`echo $NEXT_DATE | awk '{print $2}'`  NEXT_DATE=`TZ="$TIME_ZONE" date +"%H:%M:%S %Z %m/%d/%Y" -d "$NEXT_DATE + 1 second"`
GREP_DATE=`echo $NEXT_DATE | awk '{ split($3,a,"/"); print $1" "$2" "a[2]"."a[1]"."a[3]}'`

grep $GREP_DATE logfile

关于linux - shell 脚本: Increment seconds to date printed in logs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31989776/

相关文章:

linux - 中断 ID 到名称映射

linux - 为所有后续调用更改 shell 内置函数(例如 echo)的定义,但仅限于当前 shell 的范围内

linux - 空间作为从 bash 编程的参数

c++ - 在 C++ 中确定是 Linux 还是 Windows

linux - 如何使用 CPack 惯用地打包 QT 应用程序的依赖项?

linux - 从输入打印特定列的命令

linux - 如何将 stderr 重定向到一个文件并将一些回显(不是 stdout)重定向到同一个文件

python - 用 SED 替换字符串

linux - 一步删除文件和符号链接(symbolic link)

来自命令行的 MySQL - 我可以实际使用 LOCKs 吗?