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)
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
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
.
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
cat f1.txt f2.txt | sort |uniq > file3