Está en la página 1de 12

Escuela Militar de Ingeniería

MATERIA : SISTEMAS DE COMPUTACION I

CI Y
AP.
AP. MATERNO NOMBRES CODIGO
GRADO PATERNO
SAGA
TTE. INGRID
RODRIGUEZ ZEBALLOS A24009-5
ING. GUADALUPE
TTE. WILIAMS
CHACOLLA QUISPE
ADA. ARIEL
EST. DEHEZA SILVA VALERIA

FECHA DE ENTREGA : 14-ABRIL-2022


DOCENTE : ING. CESAR LOZANO MANTILLA
SEMESTRE : SEPTIMO
LABORATORIO N°4
COMPARADOR DE ARCHIVOS
A.- OBJETIVO
Diseñar una herramienta de gestión de la información modo parámetro
empleando Programación Linux.

B.- MARCO PRACTICO


Un punto muy importante son los Comparadores lógicos de las cuales ya
que con estos podemos gestionar la información de diferentes archivos
tipo texto por tal motivo tenemos los siguientes comparadores los cuales se
usan en la programación Linux.
-a =Y lógico (and)
exp1 -a exp2 devuelve verdadero si ambas exp1 y exp2 son verdaderas.
-o=O lógico (or)
exp1 -o exp2 devuelve verdadero si alguna de las expresiones exp1 y exp2
son verdaderas.
Éstos últimos operadores son similares a los operadores de Bash && (and)
y || (or) cuando se usan con doble corchete:
[[ condition1 && condition2 ]]

Comparación de archivos
Esta podría ser la función más importante de la comparación y es
probablemente la más utilizada que cualquier otra comparación. Los
parámetros que se utilizan para la comparación de archivos

-d file comprueba si el archivo existe y es un directorio


-e file comprueba si el archivo existe en el sistema
-w archivo comprueba si el archivo existe en el sistema y si es escribible
-r file comprueba si el archivo existe en el sistema y se lee
-s verifica si el archivo existe en el sistema y no está vacío
-f archivo comprueba si el archivo existe en el sistema y es un archivo
-O archivo comprueba si el archivo existe en el sistema y si es propiedad del
usuario actual
-G archivo comprueba si el archivo existe y el grupo predeterminado es el
mismo que el usuario actual
-x archivo comprueba si el archivo existe en el sistema y es ejecutable
file A -nt file B comprueba si el archivo A es más nuevo que el archivo B
file A -ot file B comprueba si el archivo A es más antiguo que el archivo B

Ejemplo:
#!/bin/bash
$fichero="~/pruebas.txt"

if [ -e "$fichero" ]; then
echo "\$fichero EXISTE"
fi

if [ -f "$fichero" ]; then
echo "\$fichero es un fichero REGULAR"
fi

if [ -s "$fichero" ]; then
echo "\$fichero NO TIENE TAMAÑO CERO"
fi

if [ -d "$fichero" ]; then
echo "\$fichero es un DIRECTORIO"
fi

if [ -b "$fichero" ]; then
echo "\$fichero es un DISPOSITIVO DE BLOQUES"
Sintaxis de operadores lógicos

Ejecutar el comando2 solo si se ejecuta el comando1:


$ comando1 && comando2

Ejecutar el comando2 solo si no se ejecuta el primero


$ comando1 || comando2
Diferencias entre dos archivos
Sobre sistemas Linux, disponemos de varias alternativas para comparar
dos archivos de texto.
Para ello, utilizaremos los siguiente ficheros de texto a modo de ejemplo:

[root@LINUX1]# cat f1.txt.


http://www.sysadmit.com
http://sysadmit.com
http://WWW.SYSADMIT.COM
HTTP://www.SYSADMIT.com
www.sysadmit.com
SYSADMIT.com

[root@LINUX1]# cat f2.txt


HTTP://www.sysadmit.COM
---http://sysadmit.com---
http://WWW.SYSADMIT.COM
HTTP://www.SYSADMIT.com
---www.sysadmit.com---
Si comparamos ambos ficheros veremos las siguientes diferencias:

1) SOMBREADO CYAN: La primera línea del fichero f1.txt contiene la


cadena http://www.sysadmit.com mientras que la primera línea del
fichero f2.txt cambian mayúsculas y
minúsculas: HTTP://www.sysadmit.COM
2) SOMBREADO AMARILLO: Las líneas 2 y 5, son distintas. En el segundo
fichero (f2.txt) se añade "---" al principio y final del texto.

3) SOMBREADO VERDE: La última línea del primer fichero, no aparece en


el segundo fichero.

Antes de examinar las distintas herramientas para comparar ficheros,


hemos de entender que muchos de los comparadores de archivos son
comparadores línea a línea, es por este motivo que igual nos puede
interesar ordenar ambos ficheros antes de proceder a la comparación.
Podemos ordenar ficheros de texto utilizando el comando sort.

Comando sort
Permite ordenar y fusionar archivos de texto. La clasificación puede
hacerse en campo de caracteres o numéricos y pueden especificarse varias
claves de ordenación. El primer campo de ordenación es el 0.
Por defecto siempre compara desde el principio de línea. Y el carácter
delimitador es el espacio en blanco.

Sintaxis:
$sort [opciones] ficheros
Esta orden ordena línea a línea según el código ASCII.
Opciones:
• -c Comprueba si los archivos están ordenados, y si es así, no se genera
ninguna salida.
• -m Fusiona los archivos especificados. Asume que ya están ordenados.
• -u Elimina las líneas repetidas.
• -o archivo Especifica el nombre del archivo de salida. Si no se especifica
es la salida estándar.
• -d Solo considera letras, cifras y espacios en blanco. No caracteres
especiales.
• -f Trata mayúsculas y minúsculas como iguales.
• -i Ignora los caracteres no imprimibles de las claves de ordenación.
• -M Trata la clave de ordenación como si fuera un mes. MAY es menor que
JUN, que a su vez es menor que JUL, y así sucesivamente.
• -n Especifica que una clave es numérica, es decir, realiza la ordenación
numérica.
• -r Invierte el orden de ordenación.
• -tcar Utiliza car como separador de campo en vez de tabuladores o
blancos.
• -b Ignora blancos en la clave de ordenación.
• +num Comienza la ordenación por el campo de posición num. Recordar
que el primer campo es el cero.
• -num Detiene la comparación antes del campo de posición num. Ese
campo no lo utiliza para ordenar.
USO DE LAS HERRAMIENTAS DE PROGRAMACION
DIAGRAMA DE FLUJO\

INICIO

ARCHIVO
a
ARCHIVO
b

ARCHIVO 1 = a
ARCHIVO 2 = b

SI NO
TAMANO
DESEA
DE
ARCHIVO 1 EJECUTAR EL
== COMANDO
# TAMANO
GREEP
PALABRAS DE
ARCHIVO1 ARCHIVO2
==#PALAB
RAS
ARCHIVO2
SI NO

ERROR
DE
CONTENI PARAM
DO
PALABRAS
ETROS #
ARCHIVO PALABRAS
1=CONTE ARCHIVO1
NIDO ==#PALAB
PALABRAS #PALABRA
NO
RAS
SI S ARCHIVO2
DIFERENTES TODAS LAS
PALABRAS

CONTENI
DO
PALABRAS
ERROR
ARCHIVO1 DE
=CONTENI PARAM
SI ETROS
NO

PALABRAS
TODAS LAS
DIFERENTES
PALABRAS
C.- IMPLEMENTACIÓN
Para que el programa empieze a correr debemos empezar en colocar el
Shell del editor de comandos como comando mediante el súper usuario
ROOT en la carpeta ENVIRONMENT el archivo PATH especificando la
dirección del archivo para darle permisos de ejecución en todo el sistema
Veremos el programa realizado en un bash:

!/bin/bash
function aPregunta()
{
echo
echo
echo "======================================================="
echo "===================================================="
echo " LOS ARCHIVOS NO SON DEL MISMO TAMANO "
echo " DESEA REALIZAR LA OPERACION?"
echo "1) SI "
echo "2) NO "
echo -n " INDIQUE LA OPCION = "
}
function aPregunta2()
{
echo
echo
echo "========================================================="
echo "===================================================="
echo "LA CANTIDAD DE PALABRAS NO ES IGUAL"
echo " DESEA REALIZAR LA OPERACION"
echo " 1) SI "
echo " 2) NO "
echo -n " SELECCIONE UN VALOR = "
}
a=$1
a1=$2
a2=$3
a3=$4
a4=$5
a5=$6
opc=0
if [ $a == 1 ]
then
echo "verificamos si existen los archivos"
echo "**************"
if [ -f $a1 ] && [ -f $a2 ]
then
echo "LOS ARCHIVOS SI EXISTEN "
echo "===================================="
echo "tamano del archivo "a" es ="
du -sh $a1
echo "====================================="
echo "tamano del archivo "b" es ="
du -sh $a2
echo "LOS ARCHIVOS SI EXISTEN"
echo
if [ "du -sh $a1" == "du -sh $a2" ]
then
echo "===================================================="
echo "LOS ARCHIVOS SON DEL MISMO TAMANO"
echo "====================================================="
echo "tamano del archivo "a" es ="
du -sh $a1
echo "====================================="
echo "tamano del archivo "b" es ="
du -sh $a2
echo
echo "CONTAMOS LAS PALABRAS DE CADA ARCHIVO "
echo " CANTIDAD DE PALABRAS EN "a" = "
wc -w $a1
echo "====================================================="
echo "CANTIDAD DE PALABRAS EN EL ARCHIVO "b" = "
wc -w $a2
echo "++++++++++++++++++"
echo
if [ "wc -w $a1" == "wc -w $a2" ]
then
echo
"===================================================="
echo " VERIFIQUEMOS LA DIFERENCIA "
echo
"====================================================="
echo "LAS PALABRAS QUE SE ENCUENTRAN
DIVIDIDAS POR UNA BARRA SON LAS PALABRAS QUE DIFIEREN ="
diff -y $a1 $a2
echo "==================================="
if [ "$a1" == "$a2" ]
then
echo "SON IDENTICAS"
echo
else
echo "SON DIFERENTES"
echo
fi
exit
else
clear
opc=0
while [ $opc != 2 ]
do
clear
case $opc in
1)
aPregunta2
echo "SI "
echo "EJECUTE LA OPERACION"
echo
echo "
LAS PALABRAS DIFERENTES SON : "
echo
"======================================================"
diff -y
$a1 $a2
echo
"======================================================"

if [ "$a1" == "$a2" ]

then

echo "SON IDENTICAS"

echo

else

echo "SON DIFERENTES"

echo

fi
exit
;;
2)
aPregunta2
echo "NO"
echo " VUELVA AL INICIO"
echo
echo
;;
*)
aPregunta2
;;
esac
read opc
done
fi
else

opc=0
while [ $opc != 2 ]
do

case $opc in
1)
aPregunta
echo "SI "
echo "EJECUTE LA OPERACION"
echo
echo " CANTIDAD DE
PALABRAS EN "a" = "
wc -w $a1
echo
"====================================================="
echo "CANTIDAD DE PALABRAS
EN EL ARCHIVO "b"= "
wc -w $a2
echo
"======================================================"
echo "LOS ARCHIVOS SI
EXISTEN"
echo
if [ "wc -w $a1" ==
"wc -w $a2" ]
then
echo
"===================================================="
echo "
VERIFIQUEMOS LA DIFERENCIA "
echo
"====================================================="
echo "LAS
PALABRAS QUE SE ENCUENTRAN DIVIDIDAS POR UNA BARRA SON LAS PALABRAS QUE DIFIEREN ="
diff -y $a1
$a2
echo
"==================================="

if [ "$a1" == "$a2" ]

then

echo "SON IDENTICAS"

echo

else

echo "SON DIFERENTES"

echo

fi
exit
else
opc=0
while [ $opc != 2 ]
do
case $opc in
1)

aPregunta2
echo "SI "
echo "EJECUTE LA
OPERACION"

echo

echo " LAS PALABRAS DIFERENTES SON : "

echo "======================================================"

diff -y $a1 $a2

echo "======================================================"

if [ "$a1" == "$a2" ]

then

echo "SON IDENTICAS"

echo

else

echo "SON DIFERENTES"

echo

fi

exit

;;
2)

aPregunta2
echo "NO"
echo " VUELVA AL
INICIO"
echo

echo
;;
*)

aPregunta2
;;
esac
read opc
done
fi

;;
2)
aPregunta
echo "NO"
echo " VUELVA AL INICIO"
echo

echo
;;
*)
aPregunta
;;
esac
read opc
done
fi

else
echo "CREAR LOS ARCHIVOS a y b "
echo " creando el archo a "
cat > $a1
echo " creando el archivo b "
cat > $a2
fi
else
clear
echo "la opcion no existe vueva a intentar"
fi

D.- PRUEBAS
Para revisar el funcionamiento tenemos que tener en cuenta los siguientes
archivos y capetas:

1
E.- BALANCE
Para realizar el siguiente trabajo se usó:
Como sistema operativo nativo el Windows 10
Como virtualizador ORACLE VM VIRTUALBOX
Como sistema operativo virtual UBUNTU de Linux
La distribución que se usó fue DEBIAN 64 bits

F.- CONCLUSIONES Y RECOMENDACIONES


Se pude evidencia que es más eficiente el uso de operadores lógicos como
ser &&. == , != que estar anidando condicionales IFs ya que ese
procedimiento es más complicado y puede ocasionar error de línea de
comandos, en cambio el uso de los operadores lógicos siempre nos
mostrara el camino de la condición ya que si usamos el “y” lógico todas las
condiciones deberán ser verdaderas para que el programa corra y si
usamos un “o” lógico solo debe cumplir una condición.

También podría gustarte