0

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

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

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

4

2 回答 2

0

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

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

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

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

于 2012-04-25T22:07:36.300 回答
0

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

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

于 2012-04-25T22:08:45.380 回答