私は、ソート可能なタイムスタンプを前に付けた2つのログファイルを持っています。 ログファイルを生成しているプロセスがまだ実行されている間、それらを順番に見たいと思います。これは、状況のかなり忠実なシミュレーションです:最小のバッファリングでソートされたファイルをマージする
slow() {
# print stdout at 30bps
exec pv -qL 30
}
timestamp() {
# prefix stdin with a sortable timestamp
exec tai64n
}
# Simulate two slowly-running batch jobs:
seq 000 099 | slow | timestamp > seq.1 &
seq1=$!
seq 100 199 | slow | timestamp > seq.2 &
seq2=$!
# I'd like to see the combined output of those two logs, in timestamp-sorted order
try1() {
# this shows me the output as soon as it's available,
# but it's badly interleaved and not necessarily in order
tail -f seq.1 --pid=$seq1 &
tail -f seq.2 --pid=$seq2 &
}
try2() {
# this gives the correct output,
# but outputs nothing till both jobs have stopped
sort -sm <(tail -f seq.1 --pid=$seq1) <(tail -f seq.2 --pid=$seq2)
}
try2
wait
ああ、あなたはすでに、私にはうってつけの「両方の仕事が止まるまで何もしていない」と言いました。あなたが 'y、x、w、a、b、c、z'のようなデータを持っているなら、正しい順序を得るためにはそれをすべて読む必要があります。非常に近いデータの場合は、タイムスタンプのように、バッファリングシステムを構築することは可能かもしれませんが、yikes!ちなみに大きなQ!がんばろう! – shellter
「チャンク」でバッファリングすることは確かに可能です。そうすれば、ほぼリアルタイムでソートされたログ出力(1分に1回出力ログ)を取得できますが、そのためにウィンドウを選択する必要があり、ログがダンプされますまとめて。 –
2つのストリームは既にソートされているので、システムは実際には各ストリームからバッファを1行だけ必要とします。その時点では、2つのうち小さい方を印刷しても、ソートされた出力を保証することができます。私は確かにそれをPythonで書くことができますが、私は既に発明されたユーティリティを望んでいました。私は実際に 'sort -m'がこのように動作するべきだと考えています... – bukzor