Solía usar Examdiff en Windows, lo cual es excelente porque muestra diferencias con respecto al tipo de archivo, como comparar JSOON u ordenar archivos INI antes de comparar.
En Linux encontré incomparable que hace todo lo que hace Examdiff, pero no tan fácil como Examdiff, además no es de código abierto. Así que necesito un programa GUI diff
que:
ACTUALIZACIÓN: Para explicar a qué me refiero con complementos daré dos ejemplos
Primero compararé los siguientes archivos:
1.json :
{
"name": "test app",
"version": "0.1",
"release_date": "2_2_2002",
"kernel": "4.14",
"username": "root",
"password": "1234",
}
2.json
{"name": "test app","version": "0.1","release_date": "2_2_2002","kernel": "4.14","username": "root","password": "1234",}
Puede ver que estos archivos JSON son idénticos en contenido, excepto que el primero está correctamente sangrado (embellecido) mientras que el segundo está minimizado.
Entonces, si ejecuto cualquier herramienta de comparación en estos archivos, obtendría muchas diferencias.
Corriendo meld
:
mientras que si ejecuto Examdiff en estos archivos, detecta que estos son archivos JSON, por lo que usa un complemento y pasa estos archivos a una pequeña utilidad que embellece estos archivos antes de compararlos (todo esto se hace bajo el capó, por supuesto). Entonces, después de compararlo muestra que los archivos son idénticos
El segundo ejemplo son los archivos INI:
1.ini
[info]
ShortName=EN
[main]
var1=Yes
var2=No
var3=Abort
var4=Ignore
var5=OK
var6=Cancel
var7=Retry
var8=All
var9=Help
2.ini
[main]
var1=Yes
var6=Cancel
var5=OK
var9=Help
var2=No
var3=Abort
var4=Ignore
var7=Retry
var8=All
[info]
ShortName=EN
En los archivos INI, el orden de los pares clave=valor no importa siempre que estén en las mismas secciones y las líneas vacías tampoco importan.
así que nuevamente correr meld
muestra muchas diferencias:
mientras ejecuta Examdiff muestra que son idénticos (esta vez usa otro complemento que se basa en una utilidad llamada INIsorter)
No es realmente una respuesta, pero mientras tanto se pueden simular algunos filtros con bash
sustitución de procesos y varias utilidades:
Para archivos .json , usando mlr
y jq
:
meld <(mlr --json cat 1.json | jq -M '.' ) \
<(mlr --json cat 2.json | jq -M '.' )
Para archivos .ini , usando crudini
:
meld <(crudini --get --format=lines 1.ini|sort) \
<(crudini --get --format=lines 2.ini|sort)
Un defecto de tales métodos es que meld
no muestra los nombres de archivo ( 1.json , etc. ), muestra los números de dispositivo de sustitución del proceso de los cuales se debe deducir el nombre de archivo correspondiente.
agc
jq
solo sería suficiente, ( es decirjq -M 1.json
), pero sinmlr
él devuelve el error " error de análisis: se esperaba otro par clave-valor en la línea 8, columna 1 ".