Je suis sûr qu'une fois, j'ai trouvé une commande unix qui peut imprimer les lignes communes à partir de deux fichiers ou plus, personne ne sait son nom? C'était beaucoup plus simple diff
.
Réponses
Trop de publicités?La commande que vous cherchez est comm
.
Pour appliquer facilement la comm commande pour des ménagères de fichiers, l'utilisation de processus de substitution:
$ bash --version
GNU bash, version 3.2.51(1)-release
Copyright (C) 2007 Free Software Foundation, Inc.
$ cat > abc
123
567
132
$ cat > def
132
777
321
De sorte que les fichiers abc et def ont une ligne en commun, l'un avec "132". À l'aide de comm sur les ménagères de fichiers:
$ comm abc def
123
132
567
132
777
321
$ comm -12 abc def # No output! The common line is not found
$
La dernière ligne ne produit aucune sortie, la ligne de conduite n'a pas été découvert.
Maintenant utiliser comm sur triés fichiers, trier les fichiers avec le processus de substitution:
$ comm <( sort abc ) <( sort def )
123
132
321
567
777
$ comm -12 <( sort abc ) <( sort def )
132
Maintenant nous avons obtenu la 132 ligne!
Peut-être vous voulez dire comm
?
Comparer triés fichiers FICHIER1 et FICHIER2 ligne par ligne.
Sans options, de produire des trois colonnes de sortie. Une colonne contient des lignes uniques à FICHIER1, colonne deux contient des lignes uniques à FICHIER2, et la troisième colonne contient les lignes communes aux deux fichiers.
Le secret pour trouver ces informations sont les pages d'information. Pour les programmes GNU, ils sont beaucoup plus détaillées que leur man-pages. Essayez info coreutils
et il va vous lister tous les petits utile utils.
Juste pour la référence, si quelqu'un est encore en train de chercher comment faire pour plusieurs fichiers: http://stackoverflow.com/a/19861397/2585303