O'Reilly logo

Bash. Receptury by Cameron Newham, JP Vossen, Carl Albing

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

7.15. Wyświetlanie danych w formie histogramu

Problem

Chcemy szybko przygotować tekstową wersję histogramu pewnych danych.

Rozwiązanie

Należy wykorzystać mechanizm tablic asocjacyjnych awk, opisany w poprzedniej recepturze:

#
# plik receptury: hist.awk
#
function max(arr,  big)
{
    big = 0;
    for (i in user)
    {
        if (user[i] > big) { big=user[i];}
    }
    return big
}

NF > 7 {
        user[$3]++
    }
END {
        # skalowanie
        maxm = max(user);
        for (i in user)
        {
            #printf "liczba plików użytkownika %s: %d\n", i, user[i]
            scaled = 60 * user[i] / maxm ;
            printf "%-10.10s  [%8d]:", i, user[i]
            for (i=0; i<scaled; i++) {
                printf "#";
            }
            printf "\n";
        }
    }

Dane wejściowe dla skryptu są takie same, jak w poprzedniej recepturze:

$ ls -lR /usr/local | awk -f hist.awk apache [ 237]:########## marek [ ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required