LINUX.ORG.RU

awk-скрипт для поиска самого часто встречающегося элемента в файле

 , ,


0

1

Начал изучать awk и не совсем понимаю, как справиться с задачей поиска наиболее встречающегося элемента в файле в 1 поле. Есть лог (кусок):

85.115.224.206 - - [15/Dec/2015:15:57:36 +0100] "GET /administrator/ HTTP/1.1" 200 4263 "-" "Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0" "-"
85.115.224.206 - - [15/Dec/2015:15:57:36 +0100] "POST /administrator/index.php HTTP/1.1" 200 4494 "http://almhuette-raith.at/administrator/" "Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0" "-"
37.113.207.93 - - [15/Dec/2015:15:59:31 +0100] "POST /administrator/index.php HTTP/1.1" 200 4494 "http://almhuette-raith.at/administrator/" "Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0" "-"
212.66.38.82 - - [15/Dec/2015:16:18:05 +0100] "POST /administrator/index.php HTTP/1.1" 200 4494 "http://almhuette-raith.at/administrator/" "Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0" "-"
5.1.50.242 - - [15/Dec/2015:16:19:23 +0100] "GET /administrator/ HTTP/1.1" 200 4263 "-" "Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0" "-"
5.1.50.242 - - [15/Dec/2015:16:19:23 +0100] "POST /administrator/index.php HTTP/1.1" 200 4494 "http://almhuette-raith.at/administrator/" "Mozilla/5.0 (Windows NT 6.0; rv:34.0) Gecko/20100101 Firefox/34.0" "-"
84.115.10.14 - - [24/Jan/2016:17:13:11 +0100] "GET /components/com_phocagallery/assets/images/shadow1.gif HTTP/1.1" 200 174 "http://www.almhuette-raith.at/index.php?option=com_phocagallery&view=category&id=1&Itemid=53" "Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1" "-"
84.115.10.14 - - [24/Jan/2016:17:13:11 +0100] "GET /components/com_phocagallery/assets/js/shadowbox/src/skin/classic/icons/next.png HTTP/1.1" 200 248 "http://www.almhuette-raith.at/index.php?option=com_phocagallery&view=category&id=1&Itemid=53" "Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1" "-"
84.115.10.14 - - [24/Jan/2016:17:13:11 +0100] "GET /components/com_phocagallery/assets/js/shadowbox/src/skin/classic/icons/pause.png HTTP/1.1" 200 155 "http://www.almhuette-raith.at/index.php?option=com_phocagallery&view=category&id=1&Itemid=53" "Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1" "-" 

)

Но у меня пока получается подсчитать количество только 1 элемента

BEGIN {FS = "\""}
NR == 1 {a=$6}
{if($6 == a) n++}
END { print "Max = " n}

Каким образом заставить awk вывести самый частый user agent из файла?



Последнее исправление: k_k8 (всего исправлений: 1)

Посмотрите примеры awk скриптов с массивами. Вам нужно создать массив, где для каждого user-агента будет количество его вхождений в файле, а в блоке END пройти по этому массиву и выбрать самый большой элемент. Если использовать UA как индекс в массиве, то нужно будет убирать(заменять) пробелы.

mky ★★★★★
()
Ответ на: комментарий от mky

Я так и пытался сделать, но после Вашего ответа все заработало. Спасибо)

k_k8
() автор топика

awk принципиален?

На perl делается как-то так:

perl -F'"' -lane '$ua{$F[5]}++; END { $value = (sort { $a <=> $b } %ua)[-1]; print grep { $ua{$_} == $value } keys %ua }'
Сначала формируем хэш с ключами — user agent'ами и значениями — их количествами, потом находим максимум и выводим соответствующий ему ключ.

dexpl ★★★★★
()
cut -d'"' -f 6 | sort | uniq -c | sort -nr | head -1

Вот это '"', потому что лоровский парсер ломается на \"

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.