Cátedra: Osvaldo Clua
Fecha: Primer recuperatorio - Primer Cuatrimestre 2006
Día: 08/06/2006
Tema: UNIX
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 <cod transacción o sin opción)
Informe
Cod transacción - Descripción transacción
Total de transacciones nnn
Total importe nnnnnn,nnn
Cuando se elija la opción -t se listarán los totales para las transacciones pedidas, sino se listarán para todas las transacciones
Se deben realizar las siguientes validaciones:
#!/bin/bash DESC_TRANS="desc_trans.tst" TRANSACCIONES="transaccion.log" function uso(){ echo "Modo de uso: `basename $0` [-t periodo]" echo "opciones:" echo " -t <periodo> 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
#!/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