Tengo algunos volcados de sql en los que estoy mirando las diferencias. diff
obviamente puede mostrarme la diferencia entre dos líneas, pero me estoy volviendo loco tratando de encontrar qué valores en la larga lista de valores separados por comas son en realidad los que hacen que las líneas sean diferentes.
¿Qué herramienta puedo usar para señalar las diferencias exactas de caracteres entre dos líneas en ciertos archivos?
command-line
diff
usuario394
fuente
fuente
Respuestas:
Hay wdiff , la palabra diff para eso.
En el escritorio, meld puede resaltar las diferencias dentro de una línea para usted.
fuente
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
herramienta que es en su mayoría compatiblewdiff
pero que también admite salida en color y probablemente algunas otras características. Y está más disponible en algunas distribuciones de Linux como Arch.wdiff -n a b | colordiff
, aconsejaman colordiff
.Solo otro método usando git-diff:
grep -v si no está interesado en las posiciones de las diferencias.
fuente
Lo he usado
vimdiff
para esto.Aquí hay una captura de pantalla (no la mía) que muestra diferencias menores de uno o dos caracteres que se destacan bastante bien. Un tutorial rápido también .
fuente
vimdiff -c 'set wrap' -c 'wincmd w' -c 'set wrap' a b
, sugiere stackoverflow.com/a/45333535/2097284 .Aquí hay un método "... el pelo del perro que te mordió" ...
diff
te llevó a este punto; úsalo para llevarte más lejos ...Aquí está la salida del uso de los pares de líneas de muestra ...
☻
indica una TABAquí está el guión ... Solo necesita descubrir los pares de líneas de alguna manera ... (He usado diff solo una vez (¿dos veces?) Antes de hoy, así que no sé sus muchas opciones, y ordenar las opciones para esto el guión fue suficiente para mí, por un día :) .. Creo que debe ser lo suficientemente simple, pero me espera un descanso para tomar café ...
fuente
wdiff
en realidad es un método muy antiguo para comparar archivos palabra por palabra. Funcionó reformateando archivos, luego usándolosdiff
para encontrar diferencias y volviéndolos a pasar. Yo mismo sugerí agregar contexto, para que, en lugar de comparar palabra por palabra, lo haga con cada palabra rodeada de otras palabras de 'contexto'. Eso permite que el diff se sincronice mucho mejor en pasajes comunes en archivos, especialmente cuando los archivos son en su mayoría diferentes con solo unos pocos bloques de palabras comunes. Por ejemplo, al comparar texto para plagio o reutilización.dwdiff
fue creado más tarde a partir dewdiff
. Perodwdiff
utiliza esa función de reformateo de texto con buenos resultadosdwfilter
. Este es un gran desarrollo: significa que puede volver a formatear un texto para que coincida con otro, y luego compararlos con cualquier visualizador gráfico de línea por línea. Por ejemplo, usándolo con diff gráfico "difuso" ...Esto reformatea
file1
el formatofile2
y lo dadiffuse
para una comparación visual.file2
no está modificado, por lo que puede editar y combinar diferencias de palabras directamente en éldiffuse
. Si desea editarfile1
, puede agregar-r
para revertir qué archivo se reformatea. ¡Pruébalo y encontrarás que es extremadamente poderoso!Mi preferencia por la diferencia gráfica (que se muestra arriba) es
diffuse
que se siente mucho más limpia y útil. También es un programa independiente de Python, lo que significa que es fácil de instalar y distribuir a otros sistemas UNIX.Otras diferencias gráficas parecen tener muchas dependencias, pero también se pueden usar (usted elige). Estos incluyen
kdiff3
oxxdiff
.fuente
Utilizando la solución de @ Peter.O como base, la reescribí para hacer una serie de cambios.
./hairOfTheDiff.sh file1.txt file2.txt
demo
la fuente; esto puede abrir la puerta a una tubería elegante para no necesitar archivos para dos entradas separadas también, usandopaste
múltiples descriptores de archivos.Sin resaltar significa que el personaje estaba en ambas líneas, resaltar significa que estaba en el primero y rojo significa que estaba en el segundo.
Los colores se pueden cambiar a través de variables en la parte superior de la secuencia de comandos e incluso puede renunciar a los colores por completo mediante el uso de caracteres normales para expresar diferencias.
fuente
Aquí hay una línea simple:
diff -y <(cat a.txt | sed -e 's/,/\n/g') <(cat b.txt | sed -e 's/,/\n/g')
La idea es reemplazar las comas (o el delimitador que desee usar) con líneas nuevas usando
sed
.diff
luego se encarga del resto.fuente
.csv
se puede crear fácilmente una hoja de cálculo , y se(A7==K7) ? "" : "diff"
inserta una fórmula o similar y se pega y copia.fuente
En la línea de comando, me aseguraría de agregar nuevas líneas juiciosas antes de comparar archivos. Puede usar sed, awk, perl o cualquier cosa realmente para agregar saltos de línea de alguna manera sistemática; sin embargo, asegúrese de no agregar demasiados.
Pero creo que lo mejor es usar vim, ya que resalta las diferencias de palabras. vim es bueno si no hay demasiadas diferencias y las diferencias son simples.
fuente
kdiff3 se está convirtiendo en el visor de diferencias de GUI estándar en Linux. Es similar a xxdiff , pero creo que kdiff3 es mejor. Hace muchas cosas bien, incluida su solicitud para mostrar "diferencias exactas de caracteres entre dos líneas en ciertos archivos".
fuente
Si estoy leyendo tu pregunta correctamente, la uso
diff -y
para este tipo de cosas.Hace que comparar una comparación lado a lado sea mucho más simple para encontrar qué líneas arrojan las diferencias.
fuente
Tuve el mismo problema y lo resolví con PHP Fine Diff , una herramienta en línea que le permite especificar granularidad. Sé que técnicamente no es una herramienta * nix, pero realmente no quería descargar un programa solo para hacer una diferencia única de nivel de personaje.
fuente