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 [ ...

Get Bash. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.