====== 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.ok exit 0