Examen Parcial - 75.08. Sistemas Operativos

Cátedra: Osvaldo Clua
Fecha: Tercera oportunidad
Día: ??/??/????
Tema: Regular Expression

Esta página está incompleta; podés ayudar completando el material.

Enunciado

Un restaurant nos pide realizar un script que muestre los vinos de su cava con año de cosecha anterior a 2002.

Para esto contamos con el archivo CAVA.stk del que SOLO sabemos lo siguiente:

  • Sus campos se encuentran separados por '+'
  • El primer campo es el nombre de etiqueta.
  • El segundo campo es la nota de cata.
  • El tercer campo es el cepaje. En caso de ser un vino de corte este campo se encuentra nulo.
  • El cuarto campo es el maridaje sugerido.
  • El quinto campo es la temperatura de servicio.
  • El sexto campo es el año de cosecha.
  • El séptimo campo es la bodega.

La información a listar debe incluir el nombre de etiqueta, la bodega y si es o no un vino de corte.

Ejemplo de salida:

Ejemplo de salida:

MALBEC D.O.C Luigi Bosca NO CORTE CASTEL Bodega Chandon CORTE

Importante: solo se pueden usar los comandos grep y sed.

Resolución

#!/bin/bash
 
ARCHIVO="cava.stk"
#expresiones regulares para filtrar los distintos vinos segun corte o no corte
CORTE="^[^*]*+[^+]*++.*" #filtra vinos de corte
NOCORTE="^[^*]*+[^+]*+[^+][^+]*+.*"  #filtra vinos de no corte
R1="200[0-1]" #año de cosecha entre 2000 y 2001
R2="1[0-9]\{3\}" #año de cosecha entre 1000 y 1999
R3="[0-9]\{1,3\}" #años entre 0 y 999
 
REGINICIO="s/^\([^+]*\)+[^+]*+[^+]*+[^+]*+[^+]*+"
REGFIN="+\([^+]*\).*"
 
#Imprimo vinos de corte anteriores a 2002
sed -n "/$CORTE/$REGINICIO$R1$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO
sed -n "/$CORTE/$REGINICIO$R2$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO
sed -n "/$CORTE/$REGINICIO$R3$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO
 
#Imprimo vinos de no corte anteriores a 2002
sed -n "/$NOCORTE/$REGINICIO$R1$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO
sed -n "/$NOCORTE/$REGINICIO$R2$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO
sed -n "/$NOCORTE/$REGINICIO$R3$REGFIN/ \1 \2 CORTE/p" < $ARCHIVO
 
exit 0

Otra Resolución

#!/bin/bash
 
HEAD='^\([^+]*\)+[^+]*+\([^+]*\)+[^+]*+[^+]*+'
FULL="$HEAD"'[^+]*+\([^+]*\)'
 
#Filtro por año
grep "$HEAD"'[0-1]' <cava.stk >>cava.temp
grep "$HEAD"'200[0-1]' <cava.stk >>cava.temp
 
# Muestro según corte
sed -n \
        -e '/++/ ! s/[^+]*/NO CORTE/3' \
        -e '/++/   s/++/+CORTE+/' \
        -e 's/'"$FULL"'/\1 | \3 | \2/p' \
         <cava.temp
rm cava.temp
materias/75/08/parcial_xxxxxxxx_3regexp.txt · Última modificación: 2009/11/01 18:41 por marianoszklanny
 
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