我正在尝试提取两个时间戳之间的所有日志。某些行可能没有时间戳,但是我希望包含这些行-我希望提取的日志中包含两个时间戳以下的每一行。
日志中可能没有开始时间戳或结束时间戳,但是我希望提取这两个时间戳之间的每一行。
我的日志时间戳结构如下:[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
答案 0 :(得分:0)
假设from_time_string
和to_time_string
是您时间戳的匹配模式,这将打印from_time_string
和to_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
并指定from
和to
时就不要包括它。