Examen Parcial - 75.08. Sistemas Operativos

Cátedra: Osvaldo Clua
Fecha: Primera oportunidad - Segundo Cuatrimestre 2008
Día: 04/11/2008
Tema: Regular Expressions - Tema 1

Enunciado

Una comercializadora de bebidas nos pide que desarrollemos un script que reciba Bodega y año de cosecha
como parámetros obligatorios y muestre por pantalla el nombre de etiqueta de todos los registros que sean
de esa bodega, de ese año y existan hasta 95 botellas.
Para ello contamos con un archivo llamado WINE_STOCK.dat con el siguiente formato:

Establecimiento|Bodega|Etiqueta|Fecha de cosecha|Cantidad de botellas|Composición

El formato de Fecha es dd-mm-aaaa

Importante: Solo se pueden utilizar los cmds grep y sed. No se permiten expresiones regulares extendidas.

Resolución

#!/bin/bash
 
BODEGA="$1"
ANIO="$2"
 
#Filtra solo los vinos que concuerdan con bodega y anio:
FILTRO1="^[^|]*|$BODEGA|[^|]*|[0-9]\{2\}-[0-9]\{2\}-$ANIO|.*"
 
#Filtra solo las botellas con cantidad entre 0 y 89:
FILTRO2="^[^|]*|[^|]*|[^|]*|[^|]*|[0-8]\{0,1\}[0-9]|.*"
 
#Filtra solo las botellas con cantidad entre 90 y 95:
FILTRO3="^[^|]*|[^|]*|[^|]*|[^|]*|[9][0-5]|.*"
 
#Filtra y deja el Nombre de Etiqueta en el grupo 1
FILTRO4="^[^|]*|[^|]*|\([^|]*\)|.*"
 
#Muestro por pantalla solo el Nombre de Etiqueta de los vinos requeridos:
grep <"WINE_STOCK.dat" "$FILTRO1" | sed -n -e "/$FILTRO2/p" -e "/$FILTRO3/p" | sed "s/$FILTRO4/\1/"

Otra forma:

#!/bin/bash
 
#Salvo que lo pidan, no es necesario chequear los parámetros
 
EXP1="[^|]*|$1|[^|]*|[^-]*-[^-]*-$2|[0-9][0-9]|.*"
EXP2="[^-]*-[^-]*-$2|9[6-9]|.*" 
 
grep $EXP1 WINE_STOCK.dat | grep -v $EXP2 | sed 's/[^|]*|[^|]*|\([^|]*\)|[^-]*-.*/\1/'

Discusión

Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.
materias/75/08/parcial_20081104_1regexp.txt · Última modificación: 2013/11/09 18:19 por loonatic
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia: CC Attribution-Noncommercial-Share Alike 3.0 Unported


Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki