Sortable bir zaman dilimi ile öntanımlı iki günlük dosyasına sahibim. Sırasıyla, günlük dosyalarını oluşturan işlemler çalışırken, onları görmek istiyorum. Bu durumun oldukça sadık simülasyon olduğunu:, en az arabelleğe alma ile sıralanmış dosyaları birleştirir
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
Ah, zaten her iki iş duruncaya kadar hiçbir şey söylemediniz. Eğer y, x, w, a, b, c, z' gibi verileriniz varsa, doğru siparişi almak için hepsini okumalısınız. Çok yakın veriler için, zaman damgalarınız olduğu için, bir arabellek sistemi oluşturabilirsin, ama yikes! Bu arada harika Q! İyi şanslar! – shellter
"Şunlar" içinde arabelleklenmesi kesinlikle mümkün olmalıdır, böylece gerçek zamanlı olarak sıralanmış günlük çıktıları elde edebilirsiniz (çıktılar bir dakika veya bir kez kaydedilir) ama bunun için bir pencere seçmeniz gerekecek ve günlükleriniz dökülecektir. toplu olarak. –
İki akış zaten sıralanmıştır, bu nedenle bir sistem her bir akıştan yalnızca bir satır arabelleğe gereksinim duyar. Bu noktada, ikisinin daha azını basabilir ve yine de iyi sıralanmış çıktıyı garanti edebilir. Bunu python'da yazabilirim, ama zaten icat edilmiş bir yardımcı programı umuyorum. Ben aslında 'sort -m' bu şekilde çalışması gerektiğini düşünüyorum ... – bukzor