Вывести топ-10 URL по общему количеству скачанных байт - Bash
Формулировка задачи:
Здравствуйте. Задали выполнить задание. Написать SHELL скрипт, где нужно вывести топ-10 URL по общему количеств у скачанных байт. Количество скачанных байт с каждой
из них как число. Количество скачанных байт с каждой из них как процент от общего
количества байт, скачанных с этих URL (Под Топ-10 понимается до 10 штук
отсортированных в порядке убывания, начиная с самого большого значения)
Пример вывода:
1. /example.com - 3100 - 74%
2. /img/image.png - 1000 - 24%
3. /robots.txt - 91 - 2%
Вот мой код, но он не рабочий. Помогите пожалуйста что тут не так? На вход подается файл log.txt
cut -f7,10 -d" " log.txt | grep -E "(.+) (\d+)" | sort -t" " -k1 > res.txt awk 'BEGIN {url="";n=0} { if(url!=$1) {print url" "n;url=$1;n=0} else{ n+=$2 } }' res.txt | sort -r -n -t" " -k2 | head > t.txt all=$(awk 'BEGIN {r=0} {r+=$2} END {print r}' t.txt) awk '{print $2*100/'"$all"'" %"}' t.txt > percent.txt paste -d" " t.txt percent.txt | tee result.txt rm res.txt t.txt
Решение задачи: «Вывести топ-10 URL по общему количеству скачанных байт»
textual
Листинг программы
awk ' BEGIN{ OFS = " - " } $10 > 0{ BITES[$7] += $10 } END{ for(i=1;i<11;i++){ max = 0 for(j in BITES) if(BITES[max] < BITES[j]) max = j TOP[i] = max VALUE[i] = BITES[max] sum += BITES[max] delete BITES[max] } for(i in TOP) print TOP[i], VALUE[i], 100*VALUE[i]/sum "%" }' log.txt
Объяснение кода листинга программы
- Устанавливает поле разделения (OFS) на
-
в начале скрипта. - Проверяет, что десятый поле (количество скачанных байт) больше нуля, и если это так, то добавляет его к общему количеству для данного URL.
- В конце скрипта устанавливает цикл, который проходит по топ-10 URL с максимальным количеством скачанных байт.
- Для каждого URL в топ-10, скрипт находит максимальное количество скачанных байт, и если оно больше текущего значения максимального количества, обновляет максимальное значение и URL этого значения.
- После цикла с топ-10 URL, скрипт выводит каждый URL, его количество скачанных байт и процент от общего количества скачанных байт.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д