Мне удалось сделать tail -f
вывод с цветами с помощью awk
команды. Но я не уверен, как вывести остальную часть журнала, так как, похоже, фильтруются только эти 2 строки. Я также хочу видеть другие строки по мере записи журнала.
Что мне нужно ввести в awk
команду, чтобы отобразить остальную часть вывода?
Изображение моей проблемы. Красный текст выше не используется awk
и отображает весь tail -f log
. А ниже та же команда с awk
цветовой фильтрацией.
решение1
Вместо того, чтобы печатать совпадающие линии с украшениями, украсьте совпадающие линии и напечатайте все:
awk '/User@Host:/ { $0 = "\033[32m" $0 "\033[39m" }; /Query_time:/ { $0 = "\033[29m" $0 "\033[39m" }; 1'
Эта awk
программа состоит из трех шаблонов и связанных с ними действий:
- Соответствующие строки
User@Host:
обрабатываются с помощью$0 = "\033[32m" $0 "\033[39m"
, который окружает текущую строку указанными управляющими кодами; - Соответствия строк
Query_time:
обрабатываются с помощью$0 = "\033[29m" $0 "\033[39m"
; - Строки, для которых шаблон
1
не равен нулю (то есть все строки), обрабатываются с использованием действия по умолчанию, которое заключается в печати текущей строки.
Они являются кумулятивными: все действия, шаблоны которых соответствуют текущей строке, выполняются в том порядке, в котором они определены. Соответствующая строка User@Host:
изменяется (первое действие) и печатается (третье действие). Соответствующая строка Query_time:
изменяется (второе действие) и печатается (третье действие). Строка, не соответствующая ни одному из них, не печатается (третье действие).
Это самый простой метод печати всех строк, без необходимости отслеживать, была ли строка уже обработана (чтобы избежать печати строки дважды). Вместо того, чтобы печатать что-то в каждом наборе операторов действия, мы изменяем текущую строку соответствующим образом и печатаем ее только один раз (но всегда печатаем).