从多个日志文件中提取给定开始和结束时间之间的记录

堆栈

我们有日志文件,格式为:

xyz,xyz, YYYY-MM-DD HH:MM:SS ,....,

我们将以YYYYMMDDHHMMSS格式获取开始时间和结束时间作为 shellscript 的输入。我们想从时间戳在开始时间和结束时间之间的所有日志文件中提取记录。

日志中的单条记录:abc,def,ghi, 2018-06-03 11:00:00 ,...,xyz

包装脚本:xyz.sh '20180603112000' '20180604120000'

预期输出:给定两个时间戳之间的所有记录。

埃里克·利瓦特
#!/bin/sh

d4="([0-9]{4})"
d2="([0-9]{2})"
pattern="$d4$d2$d2$d2$d2$d2"
replace='\1-\2-\3 \4:\5:\6'
from=$(echo "$1" | sed -r "s/$pattern/$replace/")
to=$(echo "$2" | sed -r "s/$pattern/$replace/")

sed -n "/$from/,\$p;/$to/q" file

在简单的英语中,它包含 $from 的第一个匹配项并包含与 $to 匹配的第一行。

具体来说,脚本首先将输入转换为文件中预期出现的时间戳。然后 sed 默认情况下不打印 (-n) 迭代文件,但打印从第一行到匹配 $from 到最后一行 ($) 的所有内容,但是如果遇到 $to,sed 将退出。

不过,这个解决方案并不完美。它基于每秒包含至少一个日志行的假设。或者至少是搜索的秒数。通常,您不需要按秒提取日志行,我建议按小时或分钟提取块。当然,除非你有大量的日志行,在这种情况下,我认为这个假设成立。其次,它假设日志行中的数据不包含任何时间戳。如果数据本身包含时间戳,则此功能可能会中断。

更新:我不太喜欢我给出的解决方案,因为它只打印与 $to 匹配的第一行。这很容易制作,但可能不是你想要的。这是一个在匹配 $to 的第一行之前停止的解决方案:

sed -n "/$from/,\$p" file | sed "/$to/Q"

您可以通过一次 sed 调用来完成,但有点难以理解:

sed -n "/$from/,\${/$to/Q;p}" file

这是包含匹配 $to 的所有行的解决方案

sed -n "/$from/,\$p" file | sed "/$to/{/$to/{N};q}"

新部分的解释: Q 将在自动打印之前退出,但由于我使用 p 进行打印,因此我必须确保 Q 在 p 之前触发/$to/Q;p,或者使用单独的 sed 调用以获得更易于理解的解决方案。

第二种解决方案只是自动打印,直到遇到 $to /$to/然后它将匹配 $to 的每个后续行附加到 patspace /$to/{N}最后q打印 patspace 并退出 sed。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从 rrdtool acrchive 中提取开始时间和结束时间?

来自分类Dev

仅选择开始和结束时间与日期之间的记录

来自分类Dev

如何选择给定日期段的最小开始时间和最大结束时间之间的时差?

来自分类Dev

填补开始和结束时间戳之间的空白

来自分类Dev

如何动态获取多个开始和结束时间的时差

来自分类Dev

Mysql计算上次结束时间和当前开始之间的分钟,以记录系统停机时间

来自分类Dev

从数据框中提取范围开始和范围结束记录

来自分类Dev

在给定的开始/结束时间之间有效地计算IntervalVars

来自分类Dev

Dygraph选择的开始和结束时间

来自分类Dev

获取今天的开始和结束时间

来自分类Dev

窗口的开始和结束时间

来自分类Dev

获取给定开始日期和结束日期之间的每月工作日

来自分类Dev

使用开始时间和结束时间之间的时间过滤数组或XML

来自分类Dev

使用开始时间和结束时间之间的时间筛选数组或XML

来自分类Dev

使用php打印开始时间和结束时间之间的时间间隔

来自分类Dev

如何从mysql中的开始时间和结束时间获取记录

来自分类Dev

按开始时间和结束时间合并SQL Server中的记录

来自分类Dev

MySQL数据透视表创建活动日志文件,开始,结束时间

来自分类Dev

在开始时间和结束时间之间每小时计数

来自分类Dev

PostgreSQL-在今天的开始时间和结束时间之间选择查询

来自分类Dev

如果当前时间在json数据的开始和结束时间之间,则显示数据

来自分类Dev

计算vbscript中许多开始和结束时间之间的实际持续时间

来自分类Dev

在开始时间和结束时间之间每小时计数

来自分类Dev

从开始和结束时间之间的时间戳返回一组值

来自分类Dev

Rails检查多个日期范围的开始时间和结束时间

来自分类Dev

获取给定开始日期和结束日期的日期列表

来自分类Dev

从Bash中的日志文件中提取事件之间的时间

来自分类Dev

计算批处理文件执行的开始时间和结束时间?

来自分类Dev

计算给定结束时间(datetime2)和持续时间(time(7))的开始时间

Related 相关文章

  1. 1

    如何从 rrdtool acrchive 中提取开始时间和结束时间?

  2. 2

    仅选择开始和结束时间与日期之间的记录

  3. 3

    如何选择给定日期段的最小开始时间和最大结束时间之间的时差?

  4. 4

    填补开始和结束时间戳之间的空白

  5. 5

    如何动态获取多个开始和结束时间的时差

  6. 6

    Mysql计算上次结束时间和当前开始之间的分钟,以记录系统停机时间

  7. 7

    从数据框中提取范围开始和范围结束记录

  8. 8

    在给定的开始/结束时间之间有效地计算IntervalVars

  9. 9

    Dygraph选择的开始和结束时间

  10. 10

    获取今天的开始和结束时间

  11. 11

    窗口的开始和结束时间

  12. 12

    获取给定开始日期和结束日期之间的每月工作日

  13. 13

    使用开始时间和结束时间之间的时间过滤数组或XML

  14. 14

    使用开始时间和结束时间之间的时间筛选数组或XML

  15. 15

    使用php打印开始时间和结束时间之间的时间间隔

  16. 16

    如何从mysql中的开始时间和结束时间获取记录

  17. 17

    按开始时间和结束时间合并SQL Server中的记录

  18. 18

    MySQL数据透视表创建活动日志文件,开始,结束时间

  19. 19

    在开始时间和结束时间之间每小时计数

  20. 20

    PostgreSQL-在今天的开始时间和结束时间之间选择查询

  21. 21

    如果当前时间在json数据的开始和结束时间之间,则显示数据

  22. 22

    计算vbscript中许多开始和结束时间之间的实际持续时间

  23. 23

    在开始时间和结束时间之间每小时计数

  24. 24

    从开始和结束时间之间的时间戳返回一组值

  25. 25

    Rails检查多个日期范围的开始时间和结束时间

  26. 26

    获取给定开始日期和结束日期的日期列表

  27. 27

    从Bash中的日志文件中提取事件之间的时间

  28. 28

    计算批处理文件执行的开始时间和结束时间?

  29. 29

    计算给定结束时间(datetime2)和持续时间(time(7))的开始时间

热门标签

归档