J'ai quelques draps SQL que je regarde les différences entre. diff
Je peux évidemment me montrer la différence entre deux lignes, mais je me rend fou en essayant de trouver quelles valeurs de la longue liste de valeurs séparées par des virgules sont en réalité celles qui font que les lignes sont différentes.
Quel outil puis-je utiliser pour indiquer les différences de caractères exactes entre deux lignes dans certains fichiers?
command-line
diff
utilisateur394
la source
la source
Réponses:
Il y a wdiff , le mot-diff pour cela.
Sur le bureau, meld peut mettre en évidence les différences au sein d’une ligne.
la source
wdiff -w "$(tput bold;tput setaf 1)" -x "$(tput sgr0)" -y "$(tput bold;tput setaf 2)" -z "$(tput sgr0)" file1 file2
wdiff a b | colordiff
dwdiff
outil compatible avec la plupart des applications enwdiff
couleur, mais également avec d’ autres fonctionnalités. Et il est plus disponible dans certaines distributions Linux comme Arch.wdiff -n a b | colordiff
, conseilleman colordiff
.Juste une autre méthode utilisant git-diff:
grep -v si vous n'êtes pas intéressé par les positions des diffs.
la source
J'ai utilisé
vimdiff
pour cela.Voici une capture d'écran (pas la mienne) montrant des différences mineures d'un ou deux caractères qui ressort assez bien. Un tutoriel rapide aussi .
la source
vimdiff -c 'set wrap' -c 'wincmd w' -c 'set wrap' a b
, suggère stackoverflow.com/a/45333535/2097284 .Voici une méthode ".. poil du chien qui vous a mordu" ...
diff
vous en êtes à ce point; utilisez-le pour vous emmener plus loin ...Voici le résultat de l'utilisation des paires de lignes de l'échantillon ...
☻
indique une tabulationVoici le script .. Vous avez juste besoin de fouiller les paires de lignes d'une manière ou d'une autre .. (Je n'ai utilisé diff qu'une fois (deux??) Avant aujourd'hui, donc je ne connais pas ses nombreuses options, et en trier les options pour cela le script me suffisait, pour un jour :) .. Je pense que ça doit être assez simple, mais je dois prendre une pause café ....
la source
wdiff
est en fait une très ancienne méthode de comparaison de fichiers mot par mot. Cela fonctionnait en reformatant les fichiers, en utilisant ensuitediff
pour trouver les différences et en les renvoyant. J'ai moi-même suggéré d'ajouter un contexte afin que, plutôt que de comparer mot par mot, il le fasse avec chaque mot entouré de mots «context». Cela permet au diff de se synchroniser beaucoup mieux sur les passages communs dans les fichiers, en particulier lorsque les fichiers sont très différents avec seulement quelques blocs de mots communs. Par exemple, lorsque vous comparez du texte pour un plagiat ou que vous le réutilisez.dwdiff
a été créé plus tardwdiff
. Maisdwdiff
utilise cette fonction de reformatage de texte à bon escient dansdwfilter
. C'est un grand développement - cela signifie que vous pouvez reformater un texte pour en faire correspondre un autre, puis les comparer à l'aide de tout afficheur de diff graphique par ligne. Par exemple, en l'utilisant avec un diff graphique "diffus" ....Cette reformate
file1
au format defile2
et donne quediffuse
pour une comparaison visuelle.file2
est non modifié, vous pouvez donc éditer et y fusionner les différences de mots directement dansdiffuse
. Si vous voulez éditerfile1
, vous pouvez ajouter-r
pour inverser le fichier qui est reformaté. Essayez-le et vous constaterez qu'il est extrêmement puissant!Ma préférence pour le diff graphique (illustré ci-dessus) est
diffuse
de se sentir beaucoup plus propre et utile. En outre, il s'agit d'un programme python autonome, ce qui signifie qu'il est facile à installer et à distribuer sur d'autres systèmes UNIX.D'autres différences graphiques semblent avoir beaucoup de dépendances, mais peuvent aussi être utilisées (à vous de choisir). Ceux-ci incluent
kdiff3
ouxxdiff
.la source
En utilisant la solution de @ Peter.O comme base, je l'ai réécrite pour apporter un certain nombre de modifications.
./hairOfTheDiff.sh file1.txt file2.txt
demo
dans la source. cela peut ouvrir la porte à une tuyauterie sophistiquée afin de ne pas nécessiter de fichiers pour deux entrées distinctes également, à l'aide depaste
plusieurs descripteurs de fichiers.Pas de surbrillance signifie que le personnage était dans les deux lignes, surligner signifie qu'il était dans la première, et le rouge signifie qu'il était dans la seconde.
Les couleurs sont modifiables par le biais de variables en haut du script et vous pouvez même renoncer entièrement à des couleurs en utilisant des caractères normaux pour exprimer des différences.
la source
Voici une simple ligne:
diff -y <(cat a.txt | sed -e 's/,/\n/g') <(cat b.txt | sed -e 's/,/\n/g')
L'idée est de remplacer les virgules (ou le délimiteur que vous souhaitez utiliser) par newlines
sed
.diff
prend ensuite soin du reste.la source
.csv
est facile à créer, et une formule(A7==K7) ? "" : "diff"
ou similaire insérée et copiée-collée.la source
Sur la ligne de commande, je voudrais m'assurer d'ajouter de nouvelles lignes judicieuses avant de comparer des fichiers. Vous pouvez utiliser sed, awk, perl ou autre chose vraiment pour ajouter des sauts de ligne de manière systématique - assurez-vous de ne pas en ajouter trop.
Mais je trouve que le mieux est d’utiliser vim car il met en évidence les différences entre les mots. vim est bon s’il n’ya pas trop de différences et que les différences sont simples.
la source
kdiff3 est en train de devenir le visualiseur standard de diff graphiques sur Linux. C'est similaire à xxdiff , mais je pense que kdiff3 est meilleur. Cela fait beaucoup de choses, y compris votre demande d'afficher "les différences de caractère exactes entre deux lignes dans certains fichiers".
la source
Si je lis bien votre question, je l’utilise
diff -y
pour ce genre de chose.Il est beaucoup plus simple de comparer une comparaison côte à côte pour déterminer les lignes qui génèrent les différences.
la source
J'ai eu le même problème et l'ai résolu avec PHP Fine Diff , un outil en ligne qui vous permet de spécifier la granularité. Je sais que ce n'est pas techniquement un outil * nix, mais je ne voulais pas vraiment télécharger un programme juste pour faire un diff unique, au niveau du personnage.
la source