web-dev-qa-db-fra.com

Comparaison de deux listes non triées sous Linux, répertoriant l'unique dans le deuxième fichier

J'ai 2 fichiers avec une liste de numéros (numéros de téléphone).

Je cherche une méthode pour lister les nombres dans le deuxième fichier qui ne sont pas présents dans le premier fichier.

J'ai essayé les différentes méthodes avec:

comm (getting some weird sorting errors)
fgrep -v -x -f second-file.txt first-file.txt (unsure of the result, there should be more)
32
mvrasmussen
grep -Fxv -f first-file.txt second-file.txt

Recherche fondamentalement toutes les lignes dans second-file.txt qui ne correspond à aucune ligne dans first-file.txt. Peut être lent si les fichiers sont volumineux.

De plus, une fois que vous avez trié les fichiers (utilisez sort -n s'ils sont numériques), alors comm aurait également dû fonctionner. Quelle erreur cela donne-t-il? Essaye ça:

comm -23 second-file-sorted.txt first-file-sorted.txt
61
Hari Menon

Vous devez utiliser comm:

comm -13 first.txt second.txt

fera le travail.

ps. l'ordre des premier et deuxième fichiers en matière de ligne de commande.

vous devrez peut-être également trier les fichiers avant:

comm -13 <(sort first.txt) <(sort second.txt)

dans le cas où les fichiers sont numériques, ajoutez -n option pour sort.

23
rush

Cela devrait fonctionner

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

Il semble que sort -n (numérique) ne puisse pas fonctionner avec comm, qui utilise le tri (alphanumérique) en interne

f1.txt

1
2
21
50

f2.txt

1
3
21
50

21 devrait apparaître dans la troisième colonne

#WRONG
$ comm <(sort -n f1.txt) <(sort -n f2.txt)   
                1
2
21
        3
        21
                50

#OK
$ comm <(sort f1.txt) <(sort f2.txt)
                1
2
                21
        3
                50
7
Nahuel Fouilleul
cat f1.txt f2.txt | sort |uniq > file3
1
tom