Come posso generare la differenza tra 2 file?


11

Il mio file è composto da quanto segue; grosso modo:

username:username:username:username:username 

La riga sopra continua a circa 600 caratteri.

Uso il awkcomando per usarlo come argomento in una richiesta API / HTTP inviata dalla riga di comando.

Sto usando il mio script per ottenere un elenco di account utente che mi seguono e ogni 24 ore circa, confrontando l'elenco originale sul mio disco rigido con l'elenco di nomi utente appena emesso (e facendo eco a chi non segue più me . dovrò incapsulare la mia logica in un ciclo utilizzando bash .. testare ogni nome utente.

La mia sceneggiatura attuale:

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

La mia domanda è;
Come posso generare la differenza tra 2 file?


Sai diff, vero?
schaiba,

@schaiba Grazie. L'ho appena trovato su un altro forum, funziona benissimo. Non mi ero mai imbattuto in quello prima. Spero che questa risposta sia utile per domande future di altri membri.
Ben

@schaiba potrebbe anche dare una risposta. Assicurati di affrontare diff lavorando su linee e non su campi.
terdon

Risposte:



13

Dati due file contenenti elenchi di utenti non ordinati, ad es

In file1:
    userD
    user3
    userA
    user1
    userB

e

In file2:
    user3
    userB
    userX
    user1

quindi per ottenere un semplice elenco degli utenti in file1ma non in file2, puoi farlo

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

e allo stesso modo per coinvolgere gli utenti file2ma non perfile1

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

Se i file dell'elenco sono già ordinati, questi possono essere semplificati comm -23 file1 file2e comm -13 file1 file2rispettivamente.


1
È possibile utilizzare commsenza smistamento? Il mio file di testo ha valori come 1, 2, 01, 02, 0000, 0001, 0002, ecc Utilizzando sortsarà de-sort l'ordine ...
Lanti

6

Il miglior comando per visualizzare la differenza nel contenuto dei file sarebbe

vim -d file1 file2

3

diff [options] from-file to-file

diffconfronta il contenuto dei due file da-file e to-file. È possibile specificare l' -iopzione che ignora le modifiche nel caso; considerare le lettere maiuscole e minuscole equivalenti.

Per maggiori informazioni puoi consultare questo link: http://www.computerhope.com/unix/udiff.htm oppure puoi dare un'occhiata alla pagina del manuale.


2

puoi provare le stesse finestre come fccomando in Unix e Linux cioè diff <file_new> <file_old>comando.

La linea con +++o ---davanti a loro è cambiata e una senza +'se -'snon è cambiata

Le righe con -segno vengono rimosse dal nuovo file, tuttavia esistevano nella versione precedente

Le righe con +segno vengono aggiunte dal nuovo file, tuttavia non esistevano nella versione precedente del file

Notazione Linux

Linux usa > e<

>indica che la riga dal vecchio file <indica la riga dal nuovo file che viene modificata nel vecchio file


0

Andare per vimdiff per Mostrando differenze tra due, tre o quattro versioni dello stesso file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.