Что мне нужно сделать, так это получить список пользователей от etc/group
, а затем отсортировать его и затем подсчитать уникальные записи.Сортировка и подсчет уникальных записей в массиве строк
Прямо сейчас мне удалось получить имена пользователей. Но я подозреваю, что это неправильно.
#!/bin/bash
usernames=();
while IFS=: read -r Groups Tmp1 Tmp2 Username
do
if [ $Username!="" ];
then
usernames+=($Username);
fi;
done < /etc/group
Тогда я тоже пытался разобраться, но выход ОЧЕНЬ странно:
Сортировка:
IFS=$'\n' sorted=($(sort <<<"${usernames[*]}"))
unset IFS
Выход:
echo ${usernames[@]}
echo ""
echo ${sorted[@]}
Результат:
root root root root root root _teamsserver root root _taskgated root root,_jabber,_postfix,_cyrus,_calendar,_dovecot _calendar,_jabber,_postfix _devicemgr,_teamsserver _eppc root _teamsserver _devicemgr _softwareupdate _locationd _teamsserver _devicemgr,_calendar,_teamsserver,_xserverdocs _teamsserver,_devicemgr _warmd
_calendar,_jabber,_postfix _devicemgr _devicemgr,_calendar,_teamsserver,_xserverdocs _devicemgr,_teamsserver _eppc _locationd _softwareupdate _taskgated _teamsserver _teamsserver _teamsserver _teamsserver,_devicemgr _warmd root root root root root root root root root root root,_jabber,_postfix,_cyrus,_calendar,_dovecot
У меня нет опыта работы с bash и абсолютно невозможно заставить его работать.
Что мне нужно, самое простое решение, чтобы получить список имен пользователей из/etc/group только с уникальными записями и напечатать количество повторений каждого из них.
Для бывшего, если у меня есть этот /etc/group
файл:
nobody:*:-2:
nogroup:*:-1:
wheel:*:0:root
daemon:*:1:root
kmem:*:2:root
sys:*:3:root
tty:*:4:root
operator:*:5:root
mail:*:6:_teamsserver
Я хочу, чтобы получить это:
root 6
_teamsserver 1
Пожалуйста, добавьте проверяемый образец i/p и ожидаемый о/р. Ваш файл '/ etc/group' и ваш выходной формат. – Inian
попробуйте 'cut -d: -f1/etc/group | сортировать | uniq -c' – Sundeep
Просто добавил желаемый пример – s1ddok