( lx | 2012. 12. 14., p – 15:07 )

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]
      }
   }
}