Как обработать результат последней команды с помощью awk? - PullRequest
2 голосов
/ 11 апреля 2020

Я должен посчитать, сколько пользователей было зарегистрировано в каждый день недели. Я могу получить данные с помощью последней команды на сервере, но как я могу обработать их с помощью awk? Это длинный список данных, название дня в 4-м столбце. Я объявил массив следующим образом: t ["Sun"] = 0; т [ "СБ"] = 0; et c, я могу посчитать его из простого ввода с терминала, но как я могу использовать его на выходе last?

Если я войду на сервер и наберу: last, я получу результат вот так, каждая строка, содержащая имя пользователя, pts / что-то, IP-адрес, день недели, время и т. д. c:

user pts/0 address Mon etc.

user pts/1 address Wed etc.

Я хотел бы вывод, подобный этому:

Mon: 10 users were logged in

Tue: 20 user were logged in etc

Мой код здесь, который работает с входом с терминала:

awk '
        BEGIN { t["Sun"]=0; t["Sat"]=0; t["Fri"]=0; t["Thu"]=0; t["Wed"]=0; t["Tue"]=0; t["Mon"]=0; }
        { t[substr($4,i,3)]++;} 
        END {for(i in t) print i ": " t[i]}   
'$*

Пока что на входе в терминале вот так:

aa ss dd Fri
a d g Mon
q w e Fri

дает результат:

Wed: 0
Tue: 0
Fri: 2
Thu: 0
Sat: 0
Sun: 0
Mon: 1

Как я могу использовать команду awk для обработки вывода последней?

1 Ответ

0 голосов
/ 11 апреля 2020

Звучит так, будто вам может понадобиться что-то вроде:

last |
awk '
    BEGIN { split("Sun Mon Tue Wed Thu Fri Sat",days) }
    { numUsers[$4]++ }
    END {
        for (dayNr=1; dayNr in days; dayNr++) {
            dayName = days[dayNr]
            printf "%s: %d users were logged in\n", dayName, numUsers[dayName]
        }
    }
'

, поэтому вы всегда получаете выходные данные за каждый день, включая дни, когда никто не вошел в систему, и дни отсортированы в порядке дня недели, который вы предпочитаете. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...