Cátedra: Osvaldo Clua
Fecha: Primer Oportunidad
Día: 03/11/2009
Tema: Regular Expressions (tema 1)
Una empresa de servicios públicos requiere que hagamos un script que muestre por salida standard cuántos técnicos pueden realizar una tarea en el domicilio de un cliente en un día determinado.
Solo está permitido utilizar los comandos grep, sed, vi, echo, wc
Ejemplo de ejecución:
>script.sh AVELLANEDA JUEVES Pueden realizar un tarea en AVELLANEDA un JUEVES: 3 técnicos
Toda la información necesaria se encuentra en un archivo con el siguiente formato:
DATOS.dat
−− Información de los turnos de trabajo.
NRO_TURNO: identificador de turno
DIAS_DE_SEMANA: Lista con los nombres de los días de la semana separados por ','
HORA_DE_ENTRADA: Hora de entrada con formato HH:MI:SS
HORA_DE_SALIDA: Hora de salida con formato HH:MI:SS
−− Información de los técnicos
NOMBRE_TECNICO: Nombre completo
LOCALIDAD: Nombre de la localidad donde realiza su trabajo
Lo curioso es que el separador de campo de la información de los turnos es ';', el separador de la información de los técnicos es ':' y la separación entre la información de turnos y la de técnicos es '_'
Ejemplo
1;LUNES,MARTES,MIERCOLES,VIERNES,SABADO;08:00;14:00_Ricardo_Rodriguez:MORON
Consideraciones:
#!/bin/bash if [ $# -ne 2 ]; then # mostrar uso exit 2 fi count=`grep -c "^[^;]*;[^;]*$2[^;]*;[^_]*_[^:]:$1" DATOS.dat` # Comentarios de esta linea: # En [^_]* podría tener campos de más... no lo valido # En [^;]*;[^_]* ... esto podría haber sido: [^_]* directamente en vez de [^;]*;[^_]* pero fallaría # en el caso que un día tenga "_" en su nombre. # Es decir busco: # codigoRegistro;posiblesDiasMIDIAposiblesDias;loQueSea_loQueSea:MILOCALIDAD # "no ;" "no ;" "no ;" "no _" "no :" echo "Pueden realizar una tarea en $1 un $2: $count tecnicos" exit 0