【问题标题】:Linux capture window of a large stream of dataLinux大数据流捕获窗口
【发布时间】:2012-04-25 21:40:32
【问题描述】:

假设我有大量数据在很长一段时间内(可能是一个小时)流经标准输出,并且我想根据该窗口中间发生的触发器捕获该数据的 30 秒窗口。例如,也许像

$ program-that-outputs-lots-of-data | program-that-captures-a-window-of-data

在某些时候,程序将输出包含“A-unique-string”的行,此时我想保存该字符串前后 15 秒的数据,丢弃之前的所有内容。紧接着,我想再次开始监视相同的字符串,并在它进入时捕获另一个窗口并将其保存到新文件中。知道如何使用 Linux 工具做这样的事情吗?

【问题讨论】:

    标签: linux stream window


    【解决方案1】:

    您尝试使用 时间 作为缓冲单位的事实使您的问题非常罕见。在 Unix 命令行下,一切都倾向于围绕 文本行 概念进行设计。

    例如,如果您想要捕获 15 行文本(在特殊标记之前和之后)而不是 15 的数据,您可以简单地执行以下操作:

    $ program-that-outputs-lots-of-data | grep -C 15 A-unique-string
    

    在您的情况下,即使您正在开发自己定制的过滤工具,决定保存和丢弃多少输入也是一个相当复杂的问题。我想说,多媒体流是可能有一些现成工具的领域。

    【讨论】:

    • 感谢您的信息。我正在考虑使用行数选项而不是基于时间的选项,而 grep -C 可能是最简单的方法。谢谢!
    【解决方案2】:

    我认为不存在任何接近这些目标的东西。除了您的要求相当具体之外,您还要求窗口是基于时间的,而大多数 Unix 样式的文本过滤器都是面向行的(例如,grep -C 100 获取围绕匹配的一百行)。

    在 Python、Perl、Ruby 或类似的脚本语言中执行此操作应该相当简单。

    【讨论】:

    • 如下,感谢您的信息。我正在考虑使用行数选项而不是基于时间的选项,而 grep -C 可能是最简单的方法。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2013-09-18
    • 2011-02-05
    • 2018-10-27
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多