0

大量のデータが stdout を介して長時間 (おそらく 1 時間) 流れているとします。そのウィンドウの途中で発生するトリガーに基づいて、そのデータの 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、一致を囲む 100 行を取得するため)。

Python、Perl、Ruby、または同様のスクリプト言語でこれを行うのはかなり簡単です。

于 2012-04-25T22:08:45.380 に答える