我的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:47
,ccc
加入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作业,其中此数据将转发给邮件。
答案 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"'