for user in `cut /etc/passwd -d : -f 1`;
do
echo -n "$user "
groups $user | sed -e 's/.*: //' |wc -w
done \
| sort -k 2 -n -r \
| head -1
Извлекаете список пользователей из /etc/passwd
: команда cut /etc/passwd -d : -f 1
разбивает каждую строку на колонки двоеточиями и выводит первую колонку.
Затем для каждого пользователя извлекаете список групп: groups $user
Команда выводит в формате user : group1 group2 ...
, поэтому сначала sed -e 's/.*: //
отрезает часть user :
, затем wc -w
подсчитывает количество слов group1
, group2
и т.д.
Благодаря echo "$user "
цикл печатает список
root 1
daemon 1
bin 1
sys 1
sync 1
saned 2
...
и так далее
sort -k 2 -n -r
сортирует по второму столбцу (число групп) в обратном порядке - строка с самым большим числом групп будет первой
head -1
печатает первую строку.