Вывести топ-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

Объяснение кода листинга программы

  1. Устанавливает поле разделения (OFS) на - в начале скрипта.
  2. Проверяет, что десятый поле (количество скачанных байт) больше нуля, и если это так, то добавляет его к общему количеству для данного URL.
  3. В конце скрипта устанавливает цикл, который проходит по топ-10 URL с максимальным количеством скачанных байт.
  4. Для каждого URL в топ-10, скрипт находит максимальное количество скачанных байт, и если оно больше текущего значения максимального количества, обновляет максимальное значение и URL этого значения.
  5. После цикла с топ-10 URL, скрипт выводит каждый URL, его количество скачанных байт и процент от общего количества скачанных байт.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5
Похожие ответы