Подсчет дубликатов строк из потока

В настоящее время я анализирую журналы apache с помощью этой команды:

tail -f /opt/apache/logs/access/gvh-access_log.1365638400  | 
grep specific.stuff. | awk '{print $12}' | cut -d/ -f3 > ~/logs

Вывод представляет собой список доменов:

www.domain1.com
www.domain1.com
www.domain2.com
www.domain3.com
www.domain1.com

Затем в другом терминале я запускаю эту команду:

watch -n 10 'cat ~/logs | sort | uniq -c | sort -n | tail -50'

Выход:

1023 www.domain2.com
2001 www.domain3.com
12393 www.domain1.com

Я использую это для мониторинга в квази-реальном времени Apache статистики. Беда в том, что logs получить очень большой очень быстро. Мне не нужны журналы для каких-либо других целей, кроме uniq -c,

Мой вопрос: есть ли способ избежать использования временного файла? Я не хочу вручную раскручивать свой счетчик на своем языке, я хотел бы использовать некоторые awk магия, если это возможно.

Обратите внимание, что, поскольку мне нужно использовать sortЯ должен использовать временный файл в процессе, потому что сортировка по потокам не имеет смысла (хотя uniq нет).

1 ответ

Хотя это может указывать на очевидное, но вы пробовали это:

tail -f /opt/apache/logs/access/gvh-access_log.1365638400  | grep specific.stuff. | awk '{print $12}' | cut -d/ -f3 | sort | uniq | sort -n | tail -50

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

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