假设我有大量数据在很长一段时间(也许一个小时)内流经 stdout,我想根据该窗口中间的触发器捕获该数据的 30 秒窗口。 例如,也许像
$ program-that-outputs-lots-of-data | program-that-captures-a-window-of-data
在某些时候,程序将输出包含"A-unique-string"的行,此时我想保存该字符串前后的 15 秒数据,丢弃之前的所有内容。 之后,我想立即开始监视相同的字符串,并在它进入时捕获另一个窗口并将其保存到新文件中。 知道我如何使用 Linux 工具做这样的事情吗?
您尝试使用时间作为缓冲单位这一事实使您的问题非常罕见。 在Unix命令行下,一切都倾向于围绕文本行概念进行设计。
例如,如果您想捕获 15 行文本(在特殊标记之前和之后),而不是 15 秒的数据,您只需执行以下操作:
$ program-that-outputs-lots-of-data | grep -C 15 A-unique-string
在您的情况下,即使您正在开发自己的定制过滤工具,决定保存和丢弃多少输入也是一个相当复杂的问题。 我想说的是,多媒体流是可能有一些现成工具的领域。
我认为不存在任何接近这些目标的东西。 除了您的要求相当具体之外,您还要求窗口是基于时间的,而大多数 Unix 风格的文本过滤器都是面向行的(例如 grep -C 100
得到围绕一根火柴的一百行)。
在Python,Perl或Ruby或类似的脚本语言中执行此操作应该相当简单。