====== Examen Parcial - 75.08. Sistemas Operativos ======
**Cátedra:** Osvaldo Clua\\
**Fecha:** Primera oportunidad - Primer Cuatrimestre 2005\\
**Día:** 24/05/2005\\
**Tema:** UNIX
Esta página está incompleta; podés ayudar completando el material.
===== Enunciado =====
El Fondo Monetario Internacional recibe informes de los organismos internacionales de crédito (BID, Banco Mundial, etc) en donde se indica:
* Código de Beneficiario
* Código de Préstamo
* Monto del Préstamo
* Fecha de disponibilidad (aaaammdd)
* Fecha de caducidad (aaaammdd)
Si el archivo lo envia el BID, el nombre es BIDnnnn, donde nnnn es un número de 4 dígitos secuencial.
Si el archivo lo envia el Banco Mundial, el nombre es BMnnnn, donde nnnn es un número de 4 dígitos secuencial.
Para validar al Beneficiario cuenta con una tabla (1 a n registros) con la siguiente información:
* Código
* Nombre
Ejemplo:\\
\begin{array}{|c|c|}
\hline
613 & \mbox{Argentina}\\
\hline
615 & \mbox{Peru}\\
\hline
\end{array}
**Se pide:**
Desarrollar un comando que reciba como parámetro el nombre del archivos, que se quiere procesar (parámetro obligatorio) y un código de beneficiario (parámetro opcional). Si el código de Beneficiario no se ingresa, tomar como valor de defecto el 613 qe corresponde a Argentina (pais que siempre es necesario monitorear) y grabe un archivo de salida (**salida.txt**) con la siguiente información:\\
El (BID o BM segú corresponda) ha puesto en disponibiliadd en (nombre del beneficiario) en el correinte año u$s xx(suma de los montos de préstamos con fecha de disponibilidad en el corriente año) dolares.
Validar el nombre del archivo de acuerdo al formato especificado y el parámetro opcional si este es ingresado.
**Ejemplo:**\\
El BID ha puesto en disponibilidad en Republica Argentina en el corriente año u$s 2.346.000 dolares
===== Resolución =====
#!/bin/bash
TABLA_PAISES="paises.tab"
function obtenerDescripcionPais() {
pais=$1
desc=`grep -E $pais "$TABLA_PAISES" | tr -d [0123456789,]`
if ! [ -z $desc ]
then
pais=$desc
fi
}
beneficiario=613
if [ $# -ne 1 ] && [ $# -ne 2 ]
then
echo "Uso: `basename $0` archivo [beneficiario]"
exit 1
fi
archivo=$1
if ! [ -z $2 ]
then
beneficiario=$2
fi
echo $archivo | grep -qE ^\(BID\|BM\)[0-9]{4}$
if [ $? -ne 0 ]
then
echo "El nombre de archivo $archivo no es valido"
exit 1
fi
echo $beneficiario | grep -qE ^[0-9]*$
if [ $? -ne 0 ]
then
echo "El codigo de beneficiario $beneficiario no es valido"
exit 1
fi
monto=0
anio=`echo $archivo | tr -d [:alpha:]`
# Código de Beneficiario;Código de Préstamo;Monto del Préstamo;Fecha de disponibilidad (aaaammdd);Fecha de caducidad (aaaammdd)
lineas=`grep -E ^$beneficiario\;[0-9]*\;[0-9]*\.[0-9]{2}\;$anio $archivo`
for linea in $lineas
do
BACKUP=$IFS
IFS=\;
campos=(${linea[@]})
monto=`echo "$monto+${campos[2]}" | bc`
IFS=$BACKUP
done
obtenerDescripcionPais $beneficiario
organismo=`echo $archivo | tr -d [:digit:]`
echo "El $organismo ha puesto en disponibilidad en $pais en el corriente año u\$s $monto"