我需要做的是从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
请添加一个可验证的样本我/ p和预期o/p。你的'/ etc/group'文件和你的输出格式。 – Inian
尝试'cut -d:-f1/etc/group |排序| uniq -c' – Sundeep
刚刚添加了所需的示例 – s1ddok