Постоянное отслеживание и сортировка нескольких файлов в Linux?

Есть ли способ использовать каналы или FIFO в комбинации для постоянного мониторинга нескольких (одинакового формата) файлов журналов при сортировке по первому полю, а затем с возможностью эффективно выполнять tail -f на этом непрерывном, отсортированном выводе?

Я могу делать такие вещи, как: -

mkfifo / tmp / logfile

tail -F -q *.op> / tmp / logfile &

tail -f

но я пробовал передать это как-то через сортировку -k 1, но не могу заставить его работать.

2 ответа

Почему бы это не сработало?

tail -qf *.op | sort -k 1

Похоже multitail может работать для вас, если только файлы журнала, о которых вы говорите, не очень большие. Что-то вроде

multitail -R 5 -l "sort -k1 *.op"

выполнит sort -k1 *.op Команда каждые пять секунд и положите его в выходной вид мультитейла. Конечно, если достаточно только X последних строк из журнала, то tail -n somenumber *.op | sort -k1 будет делать в командной части.

Проблема здесь, вероятно, в том, что сортировка ожидает конца потока и не может начаться, пока не достигнет его. Обычно сортировка используется для конечного набора данных, поэтому она ожидает всех данных, а затем сортирует. Если бы он не ждал, ему пришлось бы продолжать прибегать к новым данным, которые не вписывались в архитектуру Unix Pipe.

Возможно, что вы могли бы сделать, это использовать tail -100l, чтобы взять последние 100 строк каждого журнала, отсортировать по времени - и отрезать столько строк, сколько вы можете отобразить, а затем отсортировать по своему усмотрению. Тогда просто цикл, чтобы регулярно обновлять.

Другие вопросы по тегам