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

标签 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

最佳答案

使用 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/

相关文章:

linux - RH 7.1 Linux,yum 安装问题

swift - 如何在 Swift 中使用 first/head 和 rest/tail?

bash - 生成文件路径

具有复合索引的分片集群上的 MongoDB Oplog 游标

algorithm - 如何在两个链表中找到最新的相等元素?

c - 如何删除所有 IPC-Message 队列?

linux - 从任意音频文件中提取语音部分的好方法是什么?

python - Ansible cron 作业不会转义百分号 `%`

c++ - UNIX 域套接字 C++ 服务器无法向客户端返回数据

c - 当一个函数没有被前向声明时,GCC 不会在编译器阶段抛出错误