在/ etc / passwd文件中标识具有重复用户标识的用户名

时间:2012-03-02 06:08:04

标签: awk

我试图找出我的/ etc / passwd中用户ID为0的所有用户。它应该显示用户名和用户ID。我尝试了以下方法:

awk -F: '{
count[$3]++;}END {
for (i in count)
   print i, count[i];
 }'  passwd

它给出了重复的用户ID以及它们发生的次数。我实际上也想要用户名以及类似

的重复用户ID
zama      0
root      0
bin       100
nologin   100

如果解决方案提供了awk关联数组,那将会很棒。其他方法也很好。

3 个答案:

答案 0 :(得分:2)

这样做你想要的吗?

awk -F: '{
count[$3]++; names[$3 "," count[$3]] = $1}END {
for (i in count) {
  for (j = 1; j <= count[i]; j++) {
   print names[i "," j], i, count[i];
  }
}
 }'  passwd

答案 1 :(得分:2)

这可能对您有用:

awk -F: '$3~/0/{if($3 in a){d[$3];a[$3]=a[$3]"\n"$3" "$1}else{a[$3]=$3" "$1}};END{for(x in d)print a[x]}' /etc/passwd

或这个非awk解决方案:

cut -d: -f1,3 /etc/passwd |
sort -st: -k2,2n |
tr ':' ' ' |
uniq -Df1 | 
sed 's/\(.*\) \(.*\)/\2 \1/p;d'

答案 2 :(得分:-1)

myid=`cat passwd|awk -F: '{print $3 }'| sort | uniq -d`
for i in `echo "$myid"`;do
    egrep  "^.*:x:$i" passwd | awk -F: '{print $1 , $3}'
done