Comment puis-je produire la différence entre 2 fichiers?

11

Mon dossier se compose des éléments suivants; grossièrement:

username:username:username:username:username 

La ligne ci-dessus continue à environ 600 caractères.

J'utilise la awkcommande afin de l'utiliser comme argument dans une requête API / HTTP envoyée depuis la ligne de commande.

J'utilise mon script pour obtenir une liste des comptes d'utilisateurs qui me «suivent», et toutes les 24 heures environ, en comparant la liste d'origine sur mon disque dur à la liste des noms d'utilisateurs nouvellement sortie (et en faisant écho à qui ne suit plus moi . Je vais devoir résumer ma logique dans une boucle en utilisant bash .. tester chaque nom d' utilisateur.

Mon script actuel:

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

Ma question est;
Comment puis-je produire la différence entre 2 fichiers?

Ben
la source
Vous savez diff, non?
schaiba
@schaiba Merci. Je viens de découvrir cela sur un autre forum, fonctionne très bien. Je n'avais pas trébuché dessus avant cela. J'espère que cette réponse sera utile pour les futures requêtes des autres membres.
Ben
@schaiba pourrait tout aussi bien y répondre. Assurez-vous cependant de traiter les différences en travaillant sur des lignes et non sur des champs.
terdon

Réponses:

13

Étant donné deux fichiers contenant des listes d'utilisateurs non triés, par exemple

In file1:
    userD
    user3
    userA
    user1
    userB

et

In file2:
    user3
    userB
    userX
    user1

puis pour obtenir une liste simple des utilisateurs dans file1mais pas dans file2, vous pouvez faire

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

et de même pour obtenir les utilisateurs file2mais pasfile1

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

Si les fichiers de liste sont déjà triés, ceux-ci peuvent être simplifiés respectivement comm -23 file1 file2et comm -13 file1 file2.

tournevis
la source
1
Est-il possible d'utiliser commsans trier? Mon fichier texte a des valeurs comme 1, 2, 01, 02, 0000, 0001, 0002, etc. L' utilisation sortsera de-sorte l'ordre ...
Lanti
6

La meilleure commande pour voir la différence dans le contenu des fichiers serait

vim -d file1 file2
vipin kumar
la source
3

diff [options] from-file to-file

diffcompare le contenu des deux fichiers from-file et to-file.Vous pouvez spécifier l' -ioption qui ignore les modifications au cas où; considérer l'équivalent des majuscules et des minuscules.

Pour plus d'informations, vous pouvez consulter ce lien: http://www.computerhope.com/unix/udiff.htm ou vous pouvez consulter la page de manuel.

Thushi
la source
2

vous pouvez essayer les mêmes fenêtres que la fccommande sous Unix et Linux ie la diff <file_new> <file_old>commande.

La ligne avec +++ou ---devant eux a changé et une avec non +'set -'sn'a pas changé

Les lignes avec -signe sont supprimées du nouveau fichier mais elles existaient dans l'ancienne version

Les lignes avec +signe sont ajoutées à partir du nouveau fichier mais elles n'existaient pas dans l'ancienne version du fichier

Notation Linux

Linux utilise > et<

>signifie la ligne de l'ancien fichier <signifie la ligne du nouveau fichier qui est modifié dans l'ancien fichier

Abhimanyu Aryan
la source
0

Optez pour vimdiff pour afficher les différences entre deux, trois ou quatre versions du même fichier.

SHW
la source