¿Cómo puedo generar la diferencia entre 2 archivos?


11

Mi archivo consta de lo siguiente; aproximadamente:

username:username:username:username:username 

La línea anterior continúa con unos 600 caracteres.

Uso el awkcomando para usarlo como argumento en una solicitud API / HTTP enviada desde la línea de comando.

Estoy usando mi script para obtener una lista de cuentas de usuario que me 'siguen', y cada 24 horas más o menos, comparo la lista original en mi disco duro con la lista de nombre de usuario recién emitida (y repito quién ya no me sigue yo . Tendré que encapsular mi lógica en un bucle usando bash .. probando cada nombre de usuario.

Mi guión actual:

user=$(awk -F: '{ print $1 }' FILE)  # Grab $User to use as an argument.  
following=$(exec CURRENT_FOLLOWERS) # Outputs the new file

echo "X amount of users are following you on 78B066B87AF16A412556458AC85EFEF66155"  

          SAVE CURRENT FOLLOWERS TO NEW A FILE.  


if [[ DIFFERENCE IS DETECTED ]] ; then    

          echo -ne "$User NO LONGER FOLLOWING YOU\r"

   else echo -ne "This user is following you still.\r"
fi

Mi pregunta es;
¿Cómo puedo generar la diferencia entre 2 archivos?


Ya sabes diff, ¿verdad?
schaiba

@schaiba Gracias. Acabo de encontrar eso en otro foro, funciona muy bien. No me había topado con eso antes de eso. Espero que esta respuesta sea útil para futuras consultas de otros miembros.
Ben

@schaiba también puede responder. Sin embargo, asegúrese de tratar con diff trabajando en líneas, no en campos.
terdon

Respuestas:



13

Dados dos archivos que contienen listas de usuarios sin clasificar, por ejemplo

In file1:
    userD
    user3
    userA
    user1
    userB

y

In file2:
    user3
    userB
    userX
    user1

luego para obtener una lista simple de los usuarios que están dentro file1pero no dentro file2, puedes hacer

$ comm -23 <(sort file1) <(sort file2)
userA
userD

y de manera similar para que los usuarios entren file2pero no entrenfile1

$ comm -13 <(sort file1) <(sort file2)
userX

Si los archivos de la lista ya están ordenados, se pueden simplificar comm -23 file1 file2y comm -13 file1 file2respectivamente.


1
¿Es posible usar commsin ordenar? Mi archivo de texto tiene valores como 1, 2, 01, 02, 0000, 0001, 0002, etc. Usando sortse des-especie del orden ...
Lanti

6

El mejor comando para ver la diferencia en el contenido de los archivos sería

vim -d file1 file2

3

diff [options] from-file to-file

diffcompara el contenido de los dos archivos de archivo a archivo. Puede especificar la -iopción que ignora los cambios en caso; considere letras mayúsculas y minúsculas equivalentes.

Para obtener más información, puede consultar este enlace: http://www.computerhope.com/unix/udiff.htm o puede consultar la página del manual.


2

puede probar las mismas ventanas como fccomando en Unix y Linux, es decir, diff <file_new> <file_old>comando.

La línea con +++o ---en frente de ellos ha cambiado y una con no +'sy -'sno ha cambiado

Las líneas con -signo se eliminan del nuevo archivo, sin embargo, existían en la versión anterior

Las líneas con +signo se agregan desde el archivo nuevo, sin embargo, no existían en la versión anterior del archivo

Notación Linux

Linux utiliza > y<

>significa la línea del archivo antiguo <significa la línea del archivo nuevo que se cambia en el archivo antiguo


0

Vaya a vimdiff para Mostrar diferencias entre dos, tres o cuatro versiones del mismo archivo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.