A lényeg kb. ennyi, a többi formázás és hibakezelés:
BEGIN {
FS = ":"
}
FILENAME == "/etc/group" {
agroups[$3] = $1
amembers0[$3] = $NF
}
FILENAME == "/etc/passwd" {
if ( amembers0[$4]) {
amembers0[$4] = amembers0[$4] "," $1
} else {
amembers0[$4] = $1
}
agecos0[$1] = $5
}
END {
for (gid in agroups) {
print agroups[gid]
nm = split( amembers0[gid], amembers, /,/)
for (im=1; im<=nm; ++im) {
member = amembers[im]
split( agecos0[member], agecos, /;/)
printf "\t{%s} {%s} {%s} {%s}\n", member, agecos[1], agecos[2], agecos[3]
}
}
}