在10分钟的间隔内过滤日志行

时间:2015-07-28 20:25:02

标签: linux bash awk

我的dummy.text文件中有以下行。我想使用bash脚本或awk过滤这些数据。

Jul 28 15:05:47 *   aaa has joined
Jul 28 15:07:47 *   bbb has joined
Jul 28 15:08:41 *   ccc has joined
Jul 28 15:13:32 *   ddd has joined
Jul 28 15:14:40 *   eee has joined

例如,假设aaa已加入会话15:05:47ccc加入15:08:47会话。我希望在15:00:00之后和15:10:00之前获得等于/加入的行。预期结果将是:

Jul 28 15:05:47 *   aaa has joined
Jul 28 15:07:47 *   bbb has joined
Jul 28 15:08:41 *   ccc has joined

附注:在获得预期输出后,我正在寻找编写cron作业,其中此数据将转发给邮件。

3 个答案:

答案 0 :(得分:0)

一种方式:

awk -F'[ :]' '$3 == 15 && $4 >= 0 && $4 <= 10' file.txt

答案 1 :(得分:0)

cat dummy.text | awk '$3>="15:05:47" && $3<="15:08:47" {print}'

答案 2 :(得分:0)

如果您将10分钟间隔指定为15:00:00但不包括15:10:00,则:

awk -v start=15:00:00 -v end=15:10:00 '$3 >= start && $3 < end'

如果您决定从时间中省略最后:00秒,那么:

awk -v start=15:00 -v end=15:10 '$3 >= start ":00" && $3 < end ":00"'

这两个都会在任何一天的时间间隔内报告条目。如果您想限制日期,则可以应用其他条件($1$2)。

如果计算shell变量的起始值和结束值,则:

start=$(…)    # Calculate start time hh:mm
end=$(…)      # Calculate end time hh:mm
awk -v start="$start" -v end="$end" '$3 >= start ":00" && $3 < end ":00"'