Есть ли способ использовать каналы или FIFO в комбинации для постоянного мониторинга нескольких файлов журнала (одного и того же формата) при сортировке по первому полю и затем иметь возможность эффективно выполнять tail -f для этого непрерывного отсортированного вывода?
Я могу делать такие вещи, как: -
mkfifo / tmp / файл журнала
хвост -F -q * .op> / tmp / logfile &
хвост -f </ tmp / logfile
но я попытался каким-то образом передать это через sort -k 1, но не могу заставить его работать.
Почему это не сработает?
tail -qf *.op | sort -k 1
я думаю multitail
может сработать для вас, если только файлы журнала, о которых вы говорите, не огромны. Что-то вроде
multitail -R 5 -l "sort -k1 *.op"
выполнит sort -k1 *.op
каждые пять секунд, что удобно при просмотре многостадийного вывода. Конечно, если хватит только X последних строк журнала, то tail -n somenumber *.op | sort -k1
сделал бы в командную часть.
Проблема здесь, вероятно, в том, что сортировка ожидает конца потока и не может начать, пока не достигнет его. Обычно sort используется для конечного набора данных, поэтому он ожидает их всех, а затем сортирует. Если бы он не ждал, ему пришлось бы продолжать прибегать к использованию по мере поступления новых данных, что на самом деле не вписывается в архитектуру конвейеров Unix.
Возможно, вы могли бы использовать tail -100l, чтобы взять последние 100 строк каждого журнала, отсортировать по времени - и отрезать столько строк, сколько вы можете отобразить, а затем отсортировать так, как вы хотите. Затем просто зацикливайтесь на регулярном обновлении.