Examen Parcial - 75.08. Sistemas Operativos

Cátedra: Osvaldo Clua
Fecha: Primera oportunidad - Primer Cuatrimestre 2006
Día: 08/06/2006
Tema: Regular Expression

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

Enunciado

El archivo llamado MAESTRO.dat posee el siguiente formato:
Almacen;rack.nivel.columna;material;cantidad;udm;dueño

Los campos están separados por ”;”
Donde:

  • Almacén: Nombre del depósito donde se encuentra el material.
  • Rack.Nivel.Columna: Este campo contiene la direccion fisica del material, que se define por 3 especies de coordenadas separadas por el caracter ”.”
  • Material: Nombre del material que se almacena.
  • Cantidad: Cuanto material se almacena. Este campo tiene como separador decimal el caracter ”.”
  • Udm: Unidad de Medida en que se expresa la Cantidad
  • Dueño: Cliente al que pertenence el material.

Ejemplo de registros (*)
Deposito Pte Avellaneda;09.02.03;AK04;8883.3;Kg;AJ04
Deposito Solis 1793;09.02.03;03OWer;83.3;Kg;VEM2B
Almacen Caballito-3;09.02.03;AK04;4;Litros;Moreno
(*)Este ejemplo es a modo ilustrativo y de ninguna manera representa la totalidad de casos posibles

Ocurrio un error durante la generacion del archivo MAESTRO.dat resultando lo siguiente:

  • La informacion existente en el subcampo “rack” en realidad es la correspondiente al subcampo “columna”.
  • La informacion existente en el subcampo “nivel” en realidad es la correspondiente al subcampos “rack”.
  • La informacion existente en el subcampo “columna” en realidad es la correspondiente al subcampo “nivel”

Se pide generar el archivo MAESTRO.ok con la correción del error anteriormente descripto

Importante: Solo se puede utilizar el comando sed

Resolución

#!/bin/bash
# Estado actual: Alamacen;Columna.Rack.Nivel;Material;Cantidad;UDM;Dueno
# Quiero pasar a: Alamacen;Rack.Nivel.Columna;Material;Cantidad;UDM;Dueno
 
INPUT="MAESTRO.dat"
OUTPUT="MAESTRO.OK"
 
almacen="[A-Za-z0-9]*"
coordenada="[0-9]*"
 
# Numero los matcheos de cada parte con "\(" y "\)" para después ordenarlos como los necesito
sed "s/\($almacen\;\)\($coordenada\)\.\($coordenada\)\.\($coordenada\)/\1\3\.\4\.\2/" < $INPUT > $OUTPUT

Otra Resolución

#!/bin/bash
sed 's_;\([^.]*\)\.\([^.]*\)\.\([^;]*\)_;\2.\3.\1_' <maestro.dat >maestro.ok
exit 0
materias/75/08/parcial_20060608_1regexp.txt · Última modificación: 2009/11/01 16:34 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