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
26 Января 2026 (12:22:44)
annastark
(гость)
• ответить
This essay was not only helpful but also enjoyable age of war. I hope you continue to write more pieces like this!
Постоянно забываю синтаксис `uniq -c` в связке с `sort`, так что эта шпаргалка очень кстати. Добавил в закладки, чтобы не гуглить каждый раз при разборе логов.
ublocked games 76
ublocked games 76
Finally a clean way to parse logs without installing a bloated tool. Beats calculating calories manually on calories bumed calculator for sure.
Used this exact command for my logs earlier today and it saved me so much time. Probably as useful as using period-calculator for keeping track of cycles, honestly.
12 Марта 2026 (22:58:14)
zarks
(гость)
• ответить
Awk is fine for quick stuff, but using it to parse user agents like that is just asking for a headache. You should probably spend that time checking weather radar instead of fighting with regex.
12 Марта 2026 (23:07:45)
zarks
(гость)
• ответить
Old school awk one-liners are still faster than messing with ELK stacks for simple logs. If you're doing this for business stats, just use margin cal instead of calculating everything manually.