Examen Parcial - 75.08. Sistemas Operativos [Foros-FIUBA::Wiki]
 

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

  • Debe existir el archivo de log.
  • Debe existir el archivo de descripciones de treansacciones
  • Se debe ingresar ninguna o la opción -t

Resolución

#!/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

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
materias/75/08/parcial_20060608_1unix.txt · Última modificación: 2009/11/01 23:57 por marianoszklanny
 
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