236 votes

Commande Unix pour trouver des lignes de deux fichiers

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.

293voto

Jonathan Leffler Points 299946

La commande que vous cherchez est comm.

75voto

Stephan Wehner Points 194

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!

25voto

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.

10voto

user2592005 Points 1
perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/'  file1 file2

2voto

akarpovsky Points 54

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X