Utilisation d'utilitaires moins connus :
sort file1 > file1.sorted
sort file2 > file2.sorted
comm -1 -3 file1.sorted file2.sorted
Cela produira des doublons, donc s'il y a 1 3 en file1 , mais 2 en file2 , cela affichera toujours 1 3 . Si ce n'est pas ce que vous voulez, dirigez la sortie de sort à uniq avant de l'écrire dans un fichier :
sort file1 | uniq > file1.sorted
sort file2 | uniq > file2.sorted
comm -1 -3 file1.sorted file2.sorted
Il existe de nombreux utilitaires dans le package GNU coreutils qui permettent toutes sortes de manipulations de texte.
$ awk 'FNR==NR {a[$0]++; next} !($0 in a)' file1 file2
6
7
Explication du fonctionnement du code :
- Si nous travaillons sur le fichier 1, suivez chaque ligne de texte que nous voyons.
- Si nous travaillons sur le fichier 2 et que nous n'avons pas vu le texte de la ligne, imprimez-le.
Explication des détails :
FNRest le numéro d'enregistrement du fichier courantNRest le numéro d'enregistrement global actuel de tous les fichiers d'entréeFNR==NRest vrai uniquement lorsque nous lisons le fichier1$0est la ligne de texte actuellea[$0]est un hachage avec la clé définie sur la ligne de texte actuellea[$0]++pistes que nous avons vu la ligne de texte actuelle!($0 in a)est vrai uniquement lorsque nous n'avons pas vu le texte de la ligne- Imprime la ligne de texte si le modèle ci-dessus renvoie vrai, c'est le comportement par défaut d'awk lorsqu'aucune action explicite n'est donnée