Как передать хвост -f в awk

Я пытаюсь настроить сценарий, в котором генерируется предупреждение, когда в файле журнала появляется определенная строка.

Уже существующее решение выполняет поиск всего файла журнала раз в минуту и ​​подсчитывает частоту появления строки, используя отметку времени строки журнала для подсчета только вхождений за предыдущую минуту.

Я решил, что будет намного эффективнее сделать это с хвостом, поэтому в качестве теста я попробовал следующее:

FILENAME="/var/log/file.log"

tail -f $FILENAME | awk -F, -v var="$HOSTNAME" '
                BEGIN {
                        failed_count=0;
                }
                /account failure reason/ {
                        failed_count++;
                }
                END {
                        printf("%saccount failure reason (Errors per Interval)=%d\n", var, failed_count);
                }
'

но это просто висит и ничего не выводит. Кто-то предложил это небольшое изменение:

FILENAME="/var/log/file.log"

awk -F, -v var="$HOSTNAME" '
                BEGIN {
                        failed_count=0;
                }
                /account failure reason/ {
                        failed_count++;
                }
                END {
                        printf("%saccount failure reason (Errors per Interval)=%d\n", var, failed_count);
                }
' <(tail -f $FILENAME)

но это делает то же самое.

Используемый мной awk (, который я упростил в приведенном выше коде, )работает, поскольку он используется в существующем скрипте, в который передаются результаты grep "^$TIMESTAMP" .

Мой вопрос: как заставить хвост -f работать с awk?

5
задан mazz0 13 July 2012 в 11:51
поделиться