#!/usr/bin/awk -f 
# Extrae datos de individuos de un archivo /etc/passwd que siga convenciones
# y con ellos crea directorios de años y logins así como archivos datos.ind
# Dominio público. 2003. Sin garantías.


// { 
	if ($4==gid) {
		if (match($5,/^.* - .* - .* - .*,/)>0) {
			match($5,/^[^-]* - /);
			nom=substr($5,RSTART,RLENGTH-3);
			rs2=RSTART+RLENGTH;
			match($5,/^[^-]* - [^-]* - /);
			ape=substr($5,rs2,RLENGTH-rs2-2);
			rs3=RSTART+RLENGTH;
			match($5,/^[^-]* - [^-]* - [^-]* - /);
			grado="g" substr($5,rs3,RLENGTH-rs3-2);
			rs4=RSTART+RLENGTH;
			match($5,/^[^-]* - [^-]* - [^-]* - [^-]*,/);
			fec=substr($5,rs4,RLENGTH-rs4-2);
			if (match(fec,/^[0-9]*\/[0-9]*\//)>0) {
				anio=substr(fec,RLENGTH+1,length(fec)-RLENGTH);
				system("mkdir -p estudiante/" anio);
				system("mkdir -p estudiante/" anio "/" $1);
				d="estudiante/" anio "/" $1 "/datos.ind";
				print "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" > d ;
				print "<!DOCTYPE individuo SYSTEM \"individuo.dtd\">" >> d;
				print "<individuo mindatos=\"Apellidos;Nombres;FechaNacimiento\">" >> d;
				print "  <dato tipo=\"Apellidos\">" ape "</dato>" >> d;
  				print "  <dato tipo=\"Nombres\">" nom "</dato>" >> d;
				print "  <dato tipo=\"FechaNacimiento\">" fec "</dato>" >> d;
				print "  <dato tipo=\"login\">" $1 "</dato>" >> d;
				print "</individuo>" >> d;
				system("mkdir -p grado/" este_anio);
				ag="grado/" este_anio "/" grado ".grp";
				if (system("test -f \"" ag "\"")!=0) {
					print "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" > ag;
					print "<!DOCTYPE grupo SYSTEM \"grupo.dtd\">" >> ag;
					print "<grupo>" >> ag;
					grados[ngrad]=ag;
					ngrad=ngrad+1;
				}
				print "  <refind arch=\"estudiante/" anio "/" $1 "/datos.ind\"/>" >> ag;
			}
			else {
				anio="a-errado";
				print "Formato de fecha errado para " $1 ": " fec;
			}
		}
		else {
			print "Formato de " $1 " errado";
		}
	}
}


BEGIN { 
	FS=":"
	gid=ENVIRON["GID"];
	if (gid == "") {
		print "Falta variable de ambiente GID con identificación de grupo";
		exit 1;
	}
	este_anio=ENVIRON["ANIO"];
	if (este_anio == "") {
		print "Falta variable de ambiente ANIO con año en el que agregar grados";
		exit 1;
	}

	ngrad=0;
}

END {
	for (i in grados) {
		print "</grupo>" >> grados[i];
	}
}
