4

Я хочу использовать tail follow для двух файлов журнала, но в одном из файлов журнала слишком много данных, поэтому я хочу, чтобы он был отфильтрован с помощью grep.

tail -f file1 file2|grep mySearch

Проблема заключается в том, что оба файла запускаются через grep или, скорее, вывод tail проходит через grep. Только file2 должен быть отфильтрован с помощью grep mySearch. Есть идеи?

Я пробовал именованные каналы, подстановки процессов и составные команды.

3 ответа3

2

Здесь есть несколько способов снять шкуру с кошки. Мой личный фаворит на все времена - MultiTail. Он предоставляет множество способов настройки и отображения вывода из файлов, а также ряд способов фильтрации этого вывода с помощью регулярных выражений. Например, вы можете отфильтровать 1 файл, оставив еще 4 без изменений. Вы также можете сделать обратный фильтр, как grep -v .

Страницу с примерами команд можно найти по адресу http://www.vanheusden.com/multitail/examples.html.

Вам также могут понравиться некоторые скриншоты в действии. Несколько окон контролируются ncurses.

Если вы такой тип программирования, как я, вы можете создать персонализированное решение с чем-то похожим на модуль Perl File::Tail, используя select на отдельных дескрипторах.

1

Можете ли вы запустить два хвоста в фоновом режиме, передавая отфильтрованные и нефильтрованные выходные данные во временный файл.

Затем используйте этот временный файл в качестве источника для всего, что вам нужно -

tail -f file1 >> temp &
tail -f file2 | grep mySearch >> temp &


do something with temp now
1

Многоэтажный звучит так же, как мне нужно.

Это то, что я делал, и это хорошо, за исключением того, что строки журнала не в точном временном порядке.

------------- 8 <-------------

#!/bin/bash

function pidof_prog_file() {
 PGM=$1
 FIL=$2
 lsof -n 2>/dev/null| grep "${PGM}.*${FIL}" | tr -s ' ' | cut -d' ' -f 2
 }

T="tail -n 10 -f"

kill -TERM `pidof_prog_file tail application.log`
$T /var/www/protected/runtime/application.log | tr '\t' ' ' | tr -s ' ' | sed "s|^|PHP:|" &

kill -TERM `pidof_prog_file tail access.log`
$T /var/log/apache2/access.log | tr '\t' ' ' | tr -s ' ' | sed "s|^|HTTP:|" &

kill -TERM `pidof_prog_file tail catalina.out`
$T /var/log/tomcat6/catalina.out  | tr '\t' ' ' | tr -s ' ' | sed "s|^|JAVA:|" &

kill -TERM `pidof_prog_file ssh devj-db`
sudo -u $ME ssh $dbhost "$T /var/log/mysql/query.log"  | tr '\t' ' ' | tr -s ' ' | sed "s|^|SQL:|"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .