====== 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