====== 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.temp
grep "$HEAD"'200[0-1]' >cava.temp
# Muestro según corte
sed -n \
-e '/++/ ! s/[^+]*/NO CORTE/3' \
-e '/++/ s/++/+CORTE+/' \
-e 's/'"$FULL"'/\1 | \3 | \2/p' \