====== Examen Parcial - 75.08. Sistemas Operativos ======
**Cátedra:** Osvaldo Clua\\
**Fecha:** Primer recuperatorio - Primer Cuatrimestre 2006\\
**Día:** 08/06/2006\\
**Tema:** UNIX
Esta página está incompleta; podés ayudar completando el material.
===== Enunciado =====
Se tiene un archivo log de transacciones (**TRANSACCION.LOG**) con información de las operaciones realizadas por las diversas sucursales de una entidad bancaria, con el siguiente formato:
**Fecha Operación(aaaammdd);Cod Transacción; Cod Cliente; Cod Sucursal; Monto Operación**\\
**Ej.**\\
20060201;K13;457887;45;100,50\\
20060614;F56;48875T;112;112350\\
Se cuenta ademas con un archivo con las descripciones de las transacciones (**DESC_TRANS.tst**)\\
Cod Transacción; Descripción Transacciòn
Se pide realiza un script que tome este archivo de log y genere el siguiente informe de acuerdo a la opcion elegida\\
(-t
#!/bin/bash
DESC_TRANS="desc_trans.tst"
TRANSACCIONES="transaccion.log"
function uso(){
echo "Modo de uso: `basename $0` [-t periodo]"
echo "opciones:"
echo " -t realiza el informe solo del periodo requerido"
}
if [ "$1" == "-t" ]
then
if [ $# -lt 2 ]
then
uso
else
#cargo los codigos a procesar
shift
CODIGOS=";"
for codigo in $@
do
CODIGOS="$CODIGOS$codigo;"
done
fi
fi
if [ ! -e $DESC_TRANS ]
then
echo "no se encuentra la descripcion de transacciones"
exit 1;
fi
if [ ! -e $TRANSACCIONES ]
then
echo "no se encuentra el log de transacciones"
exit 2;
fi
while read linea
do
if [ -n "$linea" ]
then
ACUM=0
CANT=0
CODIGO=`echo "$linea" | cut -d";" -f1`
DESCRIPCION=`echo "$linea" | cut -d";" -f2`
PROCESAR="no"
if [ -n "$CODIGOS" ]
then
echo "$CODIGOS" | grep -E "$CODIGO;" &> /dev/null
if [ $? -eq 0 ]
then
PROCESAR="si"
else
PROCESAR="no"
fi
else
PROCESAR="si"
fi
if [ "$PROCESAR" == "si" ]
then
while read log
do
if [ -n "$log" ]
then
if [ "$CODIGO" == `echo "$log" | cut -d";" -f2` ]
then
MONTO=`echo "$log" | sed "s/,/\./" | cut -d";" -f5`
ACUM=`echo "$ACUM+$MONTO" | bc`
let CANT=$CANT+1
fi
fi
done < $TRANSACCIONES
echo "Informe"
echo "$CODIGO - $DESCRIPCION"
echo "Total de transacciones: $CANT"
ACUM=`echo "$ACUM" | sed "s/\./,/"`
echo "Total importe: $ACUM"
fi
fi
done < $DESC_TRANS
exit 0
===== Otra Resolución =====
#!/bin/bash
TXS_LOG=trans.log
TXS_DESC=trans.desc
if [ $# -gt 0 ] && [ $# -ne 2 -o $1 != '-t' ]
then
echo "Error de parámetros."
exit 1
fi
if ! [ -f "$TXS_LOG" -a -f "$TXS_DESC" ]
then
echo "Error en los archivos."
exit 2
fi
OLD_IFS=$IFS
IFS='
'
for tx_type in `cat "$TXS_DESC"`
do
COD_TX=`echo $tx_type | cut -d';' -f1`
[ -n "$2" ] && [ "$COD_TX" != "$2" ] && continue
DESC_TX=`echo $tx_type | cut -d';' -f2`
CANT_TXS=0
TOTAL_TXS=0
for tx in `grep '^[^;]*;'"$COD_TX"';' "$TXS_LOG"`
do
MONTO=`echo $tx | sed 's/,/./' | cut -d';' -f5`
TOTAL_TXS=`echo "$MONTO" + "$TOTAL_TXS" | bc -l`
let CANT_TXS++
done
echo "$COD_TX - $DESC_TX"
echo "Total de transacciones: $CANT_TXS"
echo "Total importe: $TOTAL_TXS"
done
IFS=$OLD_IFS
exit 0