Я хотел бы запустить tail
в файле журнала и выполнить набор команд, если есть соответствие для строки в этом файле журнала. В конце выполнения команда tail
должна выйти.Хвост файла и выполнение набора команд с помощью awk
Моя попытка показана ниже. Кажется, что любая строка, найденная в файле, вызывает вывод tail
. Если есть совпадение, набор команд будет запущен, и tail
выйдет, как ожидалось.
Почему tail
уходит, даже если нет совпадения?
Это моя команда:
tail -f /logs/logfile.log | awk '/string_to_match/ { system("cp /s1/* /d1") }
{system("cp /s2/* /d2") }
{ system("cp /s3/* /d3") }
{ system("pkill tail") } '
Спасибо за вашу помощь.
Способ записи вашего awk, второй, третий, четвертый блоки действий (последняя команда 'kill') будет выполнена для каждой строки ввода, есть ли совпадение или нет. – jas
'/ string_to_match /' применяется только к '{system (" cp/s1/*/d1 ")}' Все остальные действия выполняются для каждой строки канала, включая '{system (" pkill tail ")} ' – dawg
awk предназначен для манипулирования текстом, не пытайтесь использовать его как оболочку - это просто ужасная идея. См. Http://stackoverflow.com/a/42406230/1745001 за разумный подход. –