Sed 打印跨越多个文件的两个时间戳之间的行

Sed 打印跨越多个文件的两个时间戳之间的行,sed,Sed,我在尝试准确解析日志文件时遇到了一个问题,时间戳可能会(也可能不会)解析多个文件 例如: 3个日志文件进行了轮换,以便最旧的日志及时显示。log.3和最新的日志及时显示。log.1 所以我使用for循环和sed模式匹配以相反的顺序解析它们 for (( i = 3; i >= 1; --i )); do sudo cat time.log.$i | sed -nre '/2021-03-16 19:00/,/2021-03-16 19:01/p;'; done 如果您知道确切的时间戳,

我在尝试准确解析日志文件时遇到了一个问题,时间戳可能会(也可能不会)解析多个文件

例如: 3个日志文件进行了轮换,以便最旧的日志及时显示。log.3和最新的日志及时显示。log.1

所以我使用for循环和sed模式匹配以相反的顺序解析它们

for (( i = 3; i >= 1; --i )); do sudo cat time.log.$i | sed -nre '/2021-03-16 19:00/,/2021-03-16 19:01/p;'; done
如果您知道确切的时间戳,一切都很好:

line 01 | 2021-03-16 19:00
line 02 | test1
line 03 | 2021-03-16 19:01
但是如果我只知道大概的时间范围(比如把它改为19:02),那么因为找不到确切的模式,它会打印文件的其余部分

for (( i = 3; i >= 1; --i )); do sudo cat time.log.$i | sed -nre '/2021-03-16 19:00/,/2021-03-16 19:02/p;'; done
产生这个,但是20:XX时间戳在19:00到19:02的期望窗口之外…这是不可取的

line 01 | 2021-03-16 19:00
line 02 | test1
line 03 | 2021-03-16 19:01
line 04 | test2
line 05 | 2021-03-16 20:02
line 06 | test3
line 07 | 2021-03-16 20:03
line 08 | test4
我需要它只打印一个范围内的时间戳,但我很难找到答案…我已经尝试了许多谷歌搜索awk、sed、perl,但都找不到答案…我觉得我需要克服这个障碍,然后才能期待跨越多个文件的更大时间窗口工作


解释一些标准。解析不能发生在管道(|)字符上,这些行号的存在只是为了给文件中的反向顺序性质日志文件旋转和日志信息提供上下文。解析只能发生在时间戳上,并且需要包含所有“测试”信息也位于时间戳之间,因为不是每一行都有时间戳。

这种类型的时间戳可以作为字符串进行比较。
sed
不进行比较,但是
awk
进行比较:

awk -F' [|] ' '$NF>="2021-03-16 19:00" && $NF<"2021-03-16 19:02"' time.log.{3,2,1}
或者,这些线可以成对分组:

awk -F ' [|] ' '
NR%2==1 {x=$NF} x>=a; x>=b{exit}
' a='2021-03-16 21:00' b='2021-03-17 19:00' time.log.{3,2,1}
可能输入中没有真正包含

awk '
NR%2==1 {x=$0} x>=a; x>=b{exit}
' a='2021-03-16 21:00' b='2021-03-17 19:00' time.log.{3,2,1}

此类型的时间戳可以作为字符串进行比较。
sed
不进行比较,但
awk
进行比较:

awk -F' [|] ' '$NF>="2021-03-16 19:00" && $NF<"2021-03-16 19:02"' time.log.{3,2,1}
或者,这些线可以成对分组:

awk -F ' [|] ' '
NR%2==1 {x=$NF} x>=a; x>=b{exit}
' a='2021-03-16 21:00' b='2021-03-17 19:00' time.log.{3,2,1}
可能输入中没有真正包含

awk '
NR%2==1 {x=$0} x>=a; x>=b{exit}
' a='2021-03-16 21:00' b='2021-03-17 19:00' time.log.{3,2,1}

感谢您的及时回复,但我现在已经阐述了我上面的询问,以澄清一些事情。@joshebosh抱歉,我已经尝试了更多感谢您的及时回复,但我现在阐述了我上面的询问,以澄清一些事情。@joshebosh抱歉,我已经尝试了更多