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

时间:2017-02-05 15:56:47

标签: linux unix tail

我有一个包含日志的日志文件,如下所示

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

1 个答案:

答案 0 :(得分:3)

使用GNU日期和GNU awk,您可以实现您想要的目标:

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

<强>解释

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