Outils pour utilisateurs

Outils du site


comparer_deux_fichiers_texte

Comparer deux fichiers texte

Comparaisons ligne à ligne

Lignes présentes dans A et pas dans B

On cherche uniquement à savoir ce qui était dans A et qui a disparu en B1). Concrètement on se désintéresse de qui aurait été ajouté dans B2).

Autrement dit, on se demande ce qu'on perd en passant de A à B ou, réciproquement, ce qu'on gagne en passant de B à A.

On commence par un tri préalable afin d'avoir des listes comparables :

sort <A >A.sorted
sort <B >B.sorted

puis on effectue la comparaison voulue :

comm -13 B.sorted A.sorted > added.sorted

et pour avoir une idée de l'ampleur des ajouts :

cat added.sorted | wc -l

Lignes présentes uniquement dans A ou dans B

En cherche ce qui singularise chaque fichier en négligeant ce qui apparaît dans les deux.

Comme précédemment, il faut trier les fichier avec sort.

Une première version :

comm -3 B.sorted A.sorted > exclusiv.sorted

présente en deux colonnes (utilisation de tab) ce qui est spécifique à B ou à A. Pratique pour un contrôle visuel et plus encore si l'on veut copier le résultat dans une feuille de calcul, dans deux colonnes ;-).

Une seconde version presente le même résultat en une seule colonne “fusionnée” :

comm -3 B.sorted A.sorted | sed 's/^\t//' > exclusiv.sorted

Lignes communes à A et B

Comme précédemment, il faut trier les fichier avec sort.

Puis (l'ordre A, B n'a plus d'importance) :

comm -12 A.sorted B.sorted > common.sorted

Tri réel

Lors des opérations précédentes, le tri préalable (sort) sert uniquement à garantir que deux lignes identiques seront placées les unes à la suite des autres. Peu importe que le fichier soit réellement trié, au sens que l'on donne au verbe “trier” en fonction du contenu du fichier.

Il peut être pratique ou nécessaire d'avoir un fichier réellement trié. Dans de nombreux cas, il suffit d'ajouter les options appropriées à la commande sort.

Trier une liste d'adresses IPv4 :

sort -V < A > A.sorted

Trier une liste d'enregistrements composés de champs identifiés par un séparateur. L'exemple suivant illustre le traitement d'une adresse IPv4 comme composée de 4 champs numériques séparés par des “.” :

sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4
1)
Réciproquement, ce qui dans A a été ajouté à B.
2)
Respectivement, de ce qui étant dans B, ne serait plus dans A.
comparer_deux_fichiers_texte.txt · Dernière modification: 2019/06/22 08:59 par flaz