comment faire pour afficher les lignes dans la commune (à l'inverse diff)?
J'ai une série de fichiers de texte pour lequel j'aimerais savoir les lignes en commun plutôt que les lignes qui sont différents entre eux. Ligne de commande unix ou windows est très bien.
foo:
linux-vdso.so.1 => (0x00007fffccffe000)
libvlc.so.2 => /usr/lib/libvlc.so.2 (0x00007f0dc4b0b000)
libvlccore.so.0 => /usr/lib/libvlccore.so.0 (0x00007f0dc483f000)
libc.so.6 => /lib/libc.so.6 (0x00007f0dc44cd000)
bar:
libkdeui.so.5 => /usr/lib/libkdeui.so.5 (0x00007f716ae22000)
libkio.so.5 => /usr/lib/libkio.so.5 (0x00007f716a96d000)
linux-vdso.so.1 => (0x00007fffccffe000)
Donc, compte tenu de ces deux fichiers au-dessus de la sortie de l'souhaité utilitaire serait semblable à file1:line_number, file2:line_number == matching text
(juste une suggestion, je ne fais pas vraiment attention à ce que la syntaxe est):
foo:1, bar:3 == linux-vdso.so.1 => (0x00007fffccffe000)
grâce.
- Mon erreur. 1ère ligne dans le 1er exemple censé correspondre à la dernière ligne dans le 2ème exemple. Merci pour la capture de l'erreur; en train de changer.
- Une autre question similaire, avec de bonnes réponses: unix.stackexchange.com/questions/1079/...
Vous devez vous connecter pour publier un commentaire.
Sur *nix, vous pouvez utiliser comm. La réponse à la question est:
Voici la pleine utilisation de
comm
:Notez également qu'il est important de trier les fichiers avant de les utiliser comm, comme mentionné dans les pages man.
diff --unchanged-line-format='%L' --old-line-format='' --new-line-format=''
doit produire à l'identique de sortie si, pour une raison quelconque, comm n'est pas disponible.Trouvé cette réponse sur une question dans la liste comme un doublon. Je trouve grep pour être plus administrateur convivial que de la comm, donc si vous voulez l'ensemble de la correspondance des lignes (utile pour comparer des CSVs, par exemple), il suffit d'utiliser
ou de la simplification de la fgrep version
Plus, vous pouvez utiliser
file2*
à glob et recherchez les lignes en commun avec plusieurs fichiers, plutôt que de seulement deux.Certains autres pratique variations incluent
-n
drapeau pour afficher le numéro de ligne de chaque contenu de la ligne-c
à seulement compter le nombre de lignes qui correspondent à-v
pour afficher uniquement les lignes dans fichier2 qui diffèrent (ou utilisezdiff
).À l'aide de
comm
est plus rapide, mais la vitesse se fait au détriment de devoir trier vos fichiers en premier. Il n'est pas très utile comme 'inverse diff'.-v
drapeau après, j'ai glissé avec moi-même. Disons que vous avez deux fichiers csv fichier1 et fichier2, et ils ont tous les deux se chevauchent et le non-chevauchement des lignes. Si vous voulez tous et seulement les non-chevauchement des lignes, à l'aidefgrep -v file1 file2
ne reviendra que le non-cumul des lignes dans fichier2, et aucun des autres lignes qui se chevauchent dans fichier1. Cela peut être évident pour certains, mais de mieux en mieux à l'évidence que le risque de mauvaise interprétation. Dans ce cas particulier, le tri des fichiers et utilisation descomm
est toujours le meilleur choix.grep
: aucune ligne vide dans le premier fichier pour correspondre à chaque ligne dans le second fichier. Assurez-vous quefile1
a pas de lignes vides, ou il va ressembler les fichiers sont identiques.grep -Fxf
c'est pour moi.comm
parce qu'il est capable de capturer plus de lignes similaires entre les deux codes sources. L'idée est que, je veux déterminer si deux fichiers source sont liées parfois, dans leurs dernières versions.A été demandé avant: Commande Unix pour trouver des lignes de deux fichiers
Vous pouvez également essayer avec perl (crédit va ici)
comm
n'était pas facilement disponible. C'était l'alternative parfaite.Je viens d'apprendre la comm commande à partir de ce fil, mais je voulais ajouter quelque chose de plus: si les fichiers ne sont pas triés, et vous ne voulez pas toucher à l'original des fichiers, vous pouvez transférer les outptut de la commande de tri. Cela laisse les fichiers d'origine intact. Les œuvres de bash, je ne peux pas dire sur les autres coquilles.
Cela peut être étendu à comparer la sortie de la commande, au lieu de fichiers:
Meilleure façon de le faire est :
Fichiers ne sont pas nécessaires pour être triés.
Juste pour information, j'ai fait un petit outil pour Windows qui font la même chose que "grep -F -x -f fichier1 fichier2" (Que je n'ai rien trouvé d'équivalent à cette commande sur Windows)
Ici, il est :
http://www.nerdzcore.com/?page=commonlines
Utilisation est "CommonLines inputFile1 inputFile2 outputFile"
Code Source est également disponible (GPL)