Thursday, March 26, 2009

Grouping users of same group - awk bash


This is a sample /etc/passwd file:

$ cat passWD
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:2:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:2:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:12:news:/etc/news:

In the above file, we need to group the users(1st field) which belong to the same group (4th field)

Solution1:

$ awk -F ":" 'END { for (i in Arr) print i FS Arr[i] }
{ Arr[$4] = Arr[$4] ? Arr[$4] FS $1 : $1 }' passWD

Output:
7:lp
12:mail:news
0:root:sync:shutdown
1:bin
2:daemon:adm:halt


Solution2:

$ awk -F ":" '{
Arr[$4]=sprintf("%s:%s",Arr[$4],$1)}
END {for ( i in Arr) {printf("%s%s\n",i,Arr[i])}}
' passWD

Output:
7:lp
12:mail:news
0:root:sync:shutdown
1:bin
2:daemon:adm:halt

No comments:

© Jadu Saikia www.UNIXCL.com