4 votes

Comment puis-je comparer les données de deux fichiers pour identifier les données communes et uniques ?

Comment puis-je comparer les données de 2 fichiers pour identifier les données communes et uniques ? Je ne peux pas le faire ligne par ligne parce que j'ai un fichier 1 qui contient disons 100 identifiants/codes/ensembles de numéros et je veux comparer un fichier 2 au fichier 1.

Le fichier 2 contient un sous-ensemble de données du fichier 1 ainsi que des données propres au fichier 2, par exemple :

file 1      file 2
1            1
2            a
3            2
4            b
5            3 
6            c

Comment puis-je comparer les deux fichiers afin d'identifier les données communes et uniques à chaque fichier ? diff n'arrive pas à faire le travail.

7voto

αғsнιη Points 33236

Que vos fichiers 1 et 2 soient triés ou non, utilisez awk comme suit :

données uniques dans le fichier 1 :

awk 'NR==FNR{a[$0];next}!($0 in a)' file2 file1
4
5
6

données uniques dans le fichier2 :

awk 'NR==FNR{a[$0];next}!($0 in a)' file1 file2
a
b
c

données communes :

awk 'NR==FNR{a[$0];next} ($0 in a)' file1 file2
1
2
3

Explication :

NR==FNR    - Execute next block for 1st file only
a[$0]      - Create an associative array with key as '$0' (whole line) and copy that into it as its content.
next       - move to next row
($0 in a)  - For each line saved in `a` array:
             print the common lines from 1st and 2nd file "($0 in a)' file1 file2"
             or unique lines in 1st file only "!($0 in a)' file2 file1"
             or unique lines in 2nd file only "!($0 in a)' file1 file2"

5voto

Todd Gamblin Points 101

C'est ce que comm est destiné à :

$ comm <(sort file1) <(sort file2)
        1
        2
        3
4
5
6
    a
    b
    c

La première colonne contient les lignes qui n'apparaissent que dans le fichier 1
La deuxième colonne contient les lignes qui n'apparaissent que dans le fichier 2.
La troisième colonne contient les lignes communes aux deux fichiers

comm exige que les fichiers d'entrée soient triés

A exclure Pour empêcher l'apparition d'une colonne, ajoutez une option portant le numéro de cette colonne. Par exemple, pour ne voir que les lignes en commun, utilisez comm -12 ... ou les lignes qui se trouvent uniquement dans le fichier2, comm -13 ...

0voto

whereisalext Points 101

xxdiff est inégalé si vous avez simplement besoin de voir graphiquement les changements entre deux fichiers (ou répertoires !):

enter image description here

Comme pour les produits normaux diff y comm vos fichiers d'entrée doivent être triés en premier.

sort file1.txt > file1.txt.sorted
sort file2.txt > file2.txt.sorted
xxdiff file1.txt.sorted file2.txt.sorted

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X