从日志文件中获取最后 30 分钟

Get last 30 minutes from log file

我有一个日志文件,其中包含如下日志

1486307866.155 240207 68.146.231.80 TCP_MISS/200 790 CONNECT clients1.google.com:443 - DIRECT/172.217.6.238 -

1486307866.155是unix格式的时间对应2017-02-05 07:17:46(格式:Y-m-d H:i:s)

我需要一个 unix 命令,它以下列格式提供最近 30 分钟内的日志并丢弃我不需要的任何详细信息。

2017-02-05 07:17:46|68.146.231.80|clients1.google.com:443

使用 GNU date 和 GNU awk 你可以实现你想要的:

awk -v bt=$(date "+%s" -d "30 minutes ago") ' > bt {printf("%s|%s|%s\n", strftime("%F %T",), , )} ' yourfile

解释:

  • 日期命令date "+%s" -d "30 minutes ago" 获取 30 分钟前的时间戳
  • 日期命令通过命令替换功能替换为它的输出$( ... )
  • awk 选项 -v 将该时间戳作为名为 bt 的变量传递给 awk 脚本
  • 脚本仅打印文件中第一列 (</code>) 中的值大于 <code>bt 所需格式的那些行