Examen Parcial - 75.08. Sistemas Operativos

Cátedra: Osvaldo Clua
Fecha: Primera oportunidad
Día: 27/05/2008
Tema: Regular Expressions, Tema 2

Enunciado

Se pide realizar un script que reciba por parámetro el número de cliente y muestre por salida standard el nombre del cliente, junto con las fechas y los importes de las facturas de monto mayor a $3000.01

Para esto contamos con un archivo llamado CLIENTES.dat del que sólo sabemos lo siguiente:

  • Sus campos están separados por el caracter ”:”
  • El primer campo contiene el número de cliente
  • El tercer campo contiene el nombre del cliente
  • El séptimo campo contiene el cuit del cliente

También contamos con un archivo llamado FACTURAS.dat del que sólo sabemos lo siguiente:

  • Sus campos están separados por el caracter ”;”
  • El primer campo contiene el número de cliente
  • El segundo campo contiene la fecha de la factura
  • El cuarto campo contiene el importe de la factura
  • El sexto campo contiene la moneda de la factura
  • El séptimo campo contiene el cuit del cliente

IMPORTANTE: Sólo se pueden utilizar los comandos grep, sed, wc y echo

Resolución

#!/bin/bash
 
archCli="Clientes.dat"
archFact="Facturas.dat"
 
numCli=$1
 
# Busco la linea que tiene el numero de cliente (grep)
# y almaceno el nombre (sed)
nomCli=`grep "^$numCli:" $archCli\
 | sed "s/^[^:]*:[^:]*:\([^:]*\).*/\1/"`
 
echo "$nomCli"
 
# Busco (a) las facturas del cliente,
# (b) de dichas facturas, las que NO tienen importe <= 3000.01 (con grep -v)
# (c) formateo dichas lineas con sed
factsCli=`grep "^$numCli;" $archFact\
| grep -v "^[^;]*;[^;]*;[^;]*;\([12]\?[0-9]\{,3\}.[0-9]\{2\}\|3000.00\|3000.01\);.*"\
| sed "s/^[^;]*;\([^;]*\);[^;]*;\([^;]*\);.*/Fecha: \1 - Importe: \2/g"`
 
echo "$factsCli"

Archivos de Prueba

CLIENTES.dat

1:xxx:Jose:xxxx:xxxx:xxxx:20-13232930-1
2:xxx:Manuel:xxx:xxx:xxx:21-15123152-2
3:xxx:Juan:xxx:xxx:xxx:25-21231231-4
4:xxx:Pepe:xxx:xxx:xxx:20-12323423-5
5:xxx:Emmet Brown:xxx:xxx:xxx:27-33232123-1

FACTURAS.dat

1;27/11/1987;xxxx;1282.12;xxx;ARS;20-13232930-1
2;01/05/1990;xxxx;5172.25;xxx;ARS;21-15123152-2
1;11/12/1989;xxxx;3282.51;xxx;ARS;20-13232930-1
4;15/07/1995;xxxx;9827.12;xxx;ARG;20-12323423-5
5;15/07/1992;xxxx;3827.12;xxx;ARG;27-33232123-1
1;05/06/1988;xxxx;4812.13;xxx;USD;20-13232930-1
2;01/05/1990;xxxx;1972.25;xxx;ARS;21-15123152-2
1;21/08/1992;xxxx;5172.25;xxx;ARS;20-13232930-1
2;15/05/1991;xxxx;3000.25;xxx;ARS;21-15123152-2
2;18/10/1983;xxxx;1113.25;xxx;ARS;21-15123152-2
4;15/07/1991;xxxx;3000.01;xxx;SPE;20-12323423-5
4;15/07/1992;xxxx;3000.00;xxx;ARS;20-12323423-5
5;15/07/1992;xxxx;3827.12;xxx;ARG;27-33232123-1
3;15/07/1992;xxxx;3827.12;xxx;ARG;25-21231231-4
materias/75/08/parcial_20080527_2regexp.txt · Última modificación: 2013/11/10 21:12 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