我有一个包含如下日志的日志文件
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") '$1 > bt {printf("%s|%s|%s\n", strftime("%F %T",$1), $3, $7)} ' yourfile
解释:
- date 命令
date "+%s"-d "30 分钟前"
获取 30 分钟前的时间戳 - 通过命令替换功能
$( ... )
将 date 命令替换为其输出
- awk 选项
-v
将该时间戳作为名为bt
的变量传递给 awk 脚本 - 脚本仅打印文件中第一列 (
$1
) 中的值大于所需格式的bt
的那些行
关于linux - 从日志文件中获取最后 30 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42054101/