Tengo algunos volcados de sql en los que estoy mirando las diferencias. diffobviamente 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 file2wdiff a b | colordiffdwdiffherramienta que es en su mayoría compatiblewdiffpero 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
vimdiffpara 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ó" ...
diffte 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
wdiffen realidad es un método muy antiguo para comparar archivos palabra por palabra. Funcionó reformateando archivos, luego usándolosdiffpara 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.dwdifffue creado más tarde a partir dewdiff. Perodwdiffutiliza 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
file1el formatofile2y lo dadiffusepara una comparación visual.file2no está modificado, por lo que puede editar y combinar diferencias de palabras directamente en éldiffuse. Si desea editarfile1, puede agregar-rpara 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
diffuseque 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
kdiff3oxxdiff.fuente
Utilizando la solución de @ Peter.O como base, la reescribí para hacer una serie de cambios.
./hairOfTheDiff.sh file1.txt file2.txtdemola fuente; esto puede abrir la puerta a una tubería elegante para no necesitar archivos para dos entradas separadas también, usandopastemú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.diffluego se encarga del resto.fuente
.csvse 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 -ypara 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