提取两个时间戳之间的日志

时间:2019-04-02 19:19:36

标签: unix awk

我正在尝试提取两个时间戳之间的所有日志。某些行可能没有时间戳,但是我希望包含这些行-我希望提取的日志中包含两个时间戳以下的每一行。

日志中可能没有开始时间戳或结束时间戳,但是我希望提取这两个时间戳之间的每一行。

我的日志时间戳结构如下:[4/1/19 9:57:05:083 EDT] blah blah

我编写的awk命令正在获取仅包含时间戳的行,并跳过之间的所有其他行。

PFB我编写的命令:

awk -v from="11:00:38" -v to="11:50:36" '$2>=from && $2<=to && $1 == "\[4/1/19"' SystemOut.log

2 个答案:

答案 0 :(得分:0)

假设from_time_stringto_time_string是您时间戳的匹配模式,这将打印from_time_stringto_time_string实例之间的所有行:

awk '/from_time_string/{flag=1}/to_time_string/{flag=0;}flag' SystemOut.log

答案 1 :(得分:0)

这里是开始的方法-根据输入数据创建可按字母数字排序/比较的时间戳记:

$ awk -F'[[/: ]' '{cur = sprintf("20%02d/%02d/%02d %02d:%02d:%02d:%03d", $4,$2,$3,$5,$6,$7,$8); print cur, $0}' file
2019/04/01 09:57:05:083 [4/1/19 9:57:05:083 EDT] blah blah

现在只需将其与您的from和to值进行比较:

$ awk -v from='2019/04/01 09:45' -v to='2019/04/01 10:20:13' -F'[[/: ]' '
    { cur = sprintf("20%02d/%02d/%02d %02d:%02d:%02d:%03d", $4,$2,$3,$5,$6,$7,$8) }
    (cur >= from) && (cur <= to)
' file
[4/1/19 9:57:05:083 EDT] blah blah

如果您不关心日期,那么在创建cur并指定fromto时就不要包括它。