Cátedra: Osvaldo Clua
Fecha: Primer Oportunidad
Día: 26/05/2009
Tema: Regular Expressions (tema 1)
Una empresa operadora de telefonia recibe diariamente novedades de un ente llamado ABD que administra la base de datos unificada de los clientes de todas las operadoras. Las novedades son diferentes tipos de solicitudes de tramites que se deben realizar en el sistema de gestion de clientes propio. Existe un archivo que relaciona el codigo de novedad informado por el ABD y el tipo de solicitud del sistema propio, puede existir solo una relacion activa. Se pide realizar un script que reciba como parametro un tipo de solicitud y genere un archivo con las novedades recibidas con el codigo correspondiente a ese tipo.
El archivo de novedades se llama NOVEDADES.dat, el separador de campos es el '+' y posee varios campos. Solo nos interesan los siguientes campos que se encuentran en forma contigua desde el inicio del registro:
El archivo de relacion se llama TRADUCTOR.info, el separador de campos es el '/' y posee el siguiente formato:
Los valores posibles para el campo ACTIVO son 'S' o 'N'
El archivo de salida debe llamarse NOVEDADES_INBOUND.dat, con ':' como separador de campos y con el siguiente formato:
Importante: solo se pueden utilizar los comandos grep y sed. No se permiten expresiones regulares extendidas.
#!/bin/bash # Autor: Maximiliano Milicich (maximiliano.milicich@gmail.com) if [ $# -ne 1 ] ; then echo "$0 : Falta argumento TIPO_SOLICITUD" exit 1 fi TIPO_SOL=$1 PATH=${PATH}:. ARCH_NOV='NOVEDADES.dat' ARCH_TRAD='TRADUCTOR.info' ARCH_OUT='NOVEDADES_INBOUND.dat' COD_NOV=$(grep "^[^/]*/${TIPO_SOL}/S/.*$" $ARCH_TRAD | sed 's@^\([^/]*\)/.*$@\1@') if [ -z "$COD_NOV" ] ; then echo "No hay traduccion activa para $TIPO_SOL" exit 1 fi sed -n "s/^${COD_NOV}+\([^+]*\)+\([^+]*\)+\([^+]*\)+\([^+]*\)+\([^+]*\)[+]\?.*$/${TIPO_SOL}:\3:\4:\5:\1:\2/p" < "$ARCH_NOV" > "$ARCH_OUT" # Esta seria otra opcion, usando grep + sed : # grep "^${COD_NOV}+.*$" $ARCH_NOV | sed "s/^[^+]*+\([^+]*\)+\([^+]*\)+\([^+]*\)+\([^+]*\)+\([^+]*\)[+]\?.*$/${TIPO_SOL}:\3:\4:\5:\1:\2/" > $ARCH_OUT exit 0
NOVEDADES.dat
CN0001+2009-01-01+2009-01-10+4824-2890+Juan+Pepe CN0001+2009-01-01+2009-01-10+4824-2891+Juan+Pepe CN0001+2009-01-01+2009-01-10+4824-2892+Juan+Pepe CN0001+2009-01-01+2009-01-10+4824-2893+Juan+Pepe CN0001+2009-01-01+2009-01-10+4824-2894+Juan+Pepe CN0001+2009-01-01+2009-01-10+4824-2895+Juan+Pepe CN0001+2009-01-01+2009-01-10+4824-2896+Juan+Pepe CN0001+2009-01-01+2009-01-10+4824-2897+Juan+Pepe CN0001+2009-01-01+2009-01-10+4824-2898+Juan+Pepe CN0001+2009-01-01+2009-01-10+4824-2899+Juan+Pepe CN0002+2009-01-01+2009-01-10+4831-8170+Pico+Pala CN0002+2009-01-01+2009-01-10+4831-8171+Pico+Pala CN0002+2009-01-01+2009-01-10+4831-8172+Pico+Pala CN0002+2009-01-01+2009-01-10+4831-8173+Pico+Pala CN0002+2009-01-01+2009-01-10+4831-8174+Pico+Pala CN0002+2009-01-01+2009-01-10+4831-8175+Pico+Pala CN0002+2009-01-01+2009-01-10+4831-8176+Pico+Pala CN0002+2009-01-01+2009-01-10+4831-8177+Pico+Pala CN0002+2009-01-01+2009-01-10+4831-8178+Pico+Pala CN0002+2009-01-01+2009-01-10+4831-8179+Pico+Pala CN0003+2009-01-01+2009-01-10+4962-1740+Luis+Juan CN0003+2009-01-01+2009-01-10+4962-1741+Luis+Juan CN0003+2009-01-01+2009-01-10+4962-1742+Luis+Juan CN0003+2009-01-01+2009-01-10+4962-1743+Luis+Juan CN0003+2009-01-01+2009-01-10+4962-1744+Luis+Juan CN0003+2009-01-01+2009-01-10+4962-1745+Luis+Juan CN0003+2009-01-01+2009-01-10+4962-1746+Luis+Juan CN0003+2009-01-01+2009-01-10+4962-1747+Luis+Juan CN0003+2009-01-01+2009-01-10+4962-1748+Luis+Juan CN0003+2009-01-01+2009-01-10+4962-1749+Luis+Juan
TRADUCTOR.info
CN0001/TS1000/S/2009-05-01/GAK0053 CN2703/TS3077/N/2009-05-01/GAK0053 CN0002/TS2000/S/2009-05-01/GAK0053 CN0003/TS3000/S/2009-05-01/GAK0053 CN0004/TS4000/S/2009-05-01/GAK0053 CN0005/TS5000/S/2009-05-01/GAK0053 CN2698/TS3079/N/2009-05-01/GAK0053 CN0006/TS6000/S/2009-05-01/GAK0053 CN0007/TS7000/S/2009-05-01/GAK0053 CN0008/TS8000/S/2009-05-01/GAK0053 CN0009/TS9000/S/2009-05-01/GAK0053 CN8694/TS7072/N/2009-05-01/GAK0053