Linux: Сгруппировать и посчитать
Однострочник, представленный ниже, пригодится тем, кому надо быстро что-то сгруппировать и посчитать совпадения - например логи апача.
Для примера я буду использовать вот логи в таком формате, которые находятся в access.log:
Для примера я буду использовать вот логи в таком формате, которые находятся в access.log:
xxx.xxx.xxx.xxx - - [02/Oct/2015:12:11:07 +0300] "GET /program-weather.html HTTP/1.1" 200 108208 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0" xxx.xxx.xxx.xxx - - [02/Oct/2015:20:25:57 +0300] "GET /img/favicon.ico HTTP/1.1" 200 894 "-" "Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0" xxx.xxx.xxx.xxx - - [02/Oct/2015:20:31:58 +0300] "GET / HTTP/1.1" 200 22857 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0"
- Задача 1 - посчитать количество запросов к favicon.ico
# grep favicon.ico access.log | wc -l
результат:
779
- Задача 2 - посчитать количество запросов к favicon.ico, но сгруппированные по версии браузера
# grep favicon.ico access.log | awk -F\" '{print $6}' | sed 's/(\([^;]\+\)[^)]*)//' | awk '{print $3}' | sort | uniq -c | sort -rn
результат:
377 Firefox/40.0 361 Firefox/41.0 35 Firefox/38.0 4 YaBrowser/15.7.2357.2877 1 IceDragon/38.0.5 1 YaBrowser/14.5.1847.18274
- Задача 3 - посчитать все запросы сгруппированные по версии браузера
# awk -F\" '{print $6}' access.log | sed 's/(\([^;]\+\)[^)]*)//' | awk '{print $3}' | sort | uniq -c | sort -rn
результат:
6901 Firefox/40.0 5197 Firefox/41.0 541 Firefox/38.0 259 YaBrowser/15.7.2357.2877 54 IceDragon/38.0.5 52 YaBrowser/14.5.1847.18274
Похожие материалы:
Комментарии:
24 Июля 2021 (15:08:07)
assortlist
• ответить
assortlist