¿Existe alguna utilidad de diferenciación que le permita excluir columnas?

¿Existe alguna utilidad de diferenciación que le permita excluir columnas?

Por ejemplo, tengo un archivo de texto y cada línea es una cadena larga. Quiero excluir 2 "segmentos" de esta cadena, digamos las columnas 1-7 y 20-22. Entonces, las 2 líneas inferiores a continuación coincidirían:

123456789012345678901234567890 
------------------------------
xxxxxxxAAAAAAAAAAAAxxxBBBBBBBB
yyyyyyyAAAAAAAAAAAAyyyBBBBBBBB

Sé que WinMerge tiene un complemento "IgnoreColumns", pero nunca he funcionado así. En este ejemplo, le cambiaría el nombre a IgnoreColumns_1-7, 20-22.dll, lo seleccionaría en el menú de complementos y elegiría "Pre-Differ". pero nunca ha funcionado.

Voy a comparar archivos enormes que no quiero modificar. No me opongo a editarlos en secuencia en comparación con sed o algo así, pero preferiría no modificar los archivos reales. Todavía no elegí alimentar sed a diff solo porque esperaba una vista más visual de los datos.

Respuesta1

Lo siguiente funciona en Linux y Cygwin.

vimdiff <(cut -c8-19,23- file1) <(cut -c8-19,23- file2)

Por alguna razón en Cygwin, Vim indica que cada archivo ha cambiado desde que comenzó la edición y pregunta: "[O]K, (L)cargar archivo:". Simplemente escribe Ocada vez.

Es cierto que no puedes ver las columnas omitidas, pero es una comparación visual, una al lado de la otra.

Respuesta2

Si aún desea que funcione el complemento "IgnoreColumns" de WinMerge... parece que está cerca. Dos notas:

  1. Para su ejemplo, en la subcarpeta de WinMerge MergePlugins, copie IgnoreColumns.dlla IgnoreColumns_1-7_20-22.dll(sin espacios y usando subrayado en lugar de coma).

  2. Salga de WinMerge por completo y vuelva a ejecutarlo después de colocar esa DLL. ("Recargar complementos" actualizará el menú desplegable Plug-ins/ , pero no actualizará la funcionalidad).List

Nota al margen: recomiendo una versión "compatible pero no oficial" de WinMerge (2.13.20.12) que incluye comparaciones tripartitas. Ir aConstrucciones no oficiales de WinMerge, y en la parte inferior verás la "versión compatible con diferenciación de 3 vías".

Respuesta3

Al igual que la respuesta de Diogo_Rocha, puede modificar el archivo de antemano para eliminar las columnas que no desea probar y luego ejecutar diff. Pero solo con cosas de línea de comandos.

Entonces, para su ejemplo, podría eliminar las 'columnas' 1-7 y 20-22.

sed 's/.\{7\}\(.\{12\}\).\{3\}\(.*\)/\1\2/' test.txt > test2.txt
diff -u test2.txt whatnot.txt

Editar:Robo descarado de la mejor respuesta de Garyjohn.

diff -u <(cut -c8-19,23- test1.txt) <(cut -c8-19,23- test2.txt) | less

Respuesta4

Si pudiera entender su duda, está intentando excluir o seleccionar columnas específicas de un archivo de texto. Si es cierto, puedes hacerlo con elpanel de textosolicitud. Instálelo y abra su archivo de texto, luego presione la tecla "Alt" al mismo tiempo que selecciona columnas específicas de su texto. Con estas columnas seleccionadas podrás copiar, cortar o eliminar cada una de las que necesites.

información relacionada