Existe um utilitário diff que permite excluir colunas?

Existe um utilitário diff que permite excluir colunas?

Por exemplo, eu tenho um arquivo de texto, cada linha é uma string longa. Quero excluir 2 "segmentos" desta string, digamos colunas 1-7 e 20-22. Portanto, as duas linhas inferiores abaixo seriam correspondentes:

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

Eu sei que o WinMerge tem um plugin "IgnoreColumns", mas nunca fiz isso funcionar. Neste exemplo, eu renomearia-o como IgnoreColumns_1-7, 20-22.dll, selecione-o no menu de plug-ins e escolha "Pré-Differ". mas nunca funcionou.

Vou comparar arquivos enormes que não quero modificar. Não me oponho a editá-los em fluxo em comparação com sed ou algo parecido, mas prefiro não modificar os arquivos reais. Ainda não escolhi alimentar o sed para diff só porque esperava uma visão mais visual dos dados.

Responder1

O seguinte funciona no Linux e no Cygwin.

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

Por alguma razão no Cygwin, o Vim avisa que cada arquivo foi alterado desde o início da edição e pergunta: "[O]K, (L)oad File:". Basta digitar Ocada vez.

É verdade que você não consegue ver as colunas omitidas, mas é uma comparação visual lado a lado.

Responder2

Se você ainda deseja que o plugin WinMerge "IgnoreColumns" funcione... parece que você está perto. Duas notas:

  1. MergePluginsPara o seu exemplo, na subpasta do WinMerge , copie IgnoreColumns.dllpara IgnoreColumns_1-7_20-22.dll(sem espaços e usando sublinhado em vez de vírgula).

  2. Saia completamente do WinMerge e execute-o novamente, após colocar essa DLL. ("Recarregar plug-ins" atualizará o menu suspenso Plug-ins/ , mas não atualizará a funcionalidade.)List

Nota lateral: eu recomendo uma versão “suportada, mas não oficial” do WinMerge – 2.13.20.12 – que inclui comparações de três vias. Vá paraCompilações não oficiais do WinMerge, e na parte inferior você verá a "versão compatível com diferença de 3 vias".

Responder3

Tal como a resposta do Diogo_Rocha, você pode modificar o arquivo previamente para remover as colunas que não deseja testar e depois executar o diff. Mas apenas com coisas de linha de comando.

Então, para o seu exemplo, você poderia remover as 'colunas' 1-7 e 20-22.

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

Editar:Roubo flagrante da melhor resposta de garyjohn.

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

Responder4

Se eu entendi sua dúvida, você está tentando excluir ou selecionar colunas específicas de um arquivo de texto. Se for verdade, você pode fazer isso com obloco de textoaplicativo. Instale-o e abra seu arquivo de texto e pressione a tecla "Alt" ao mesmo tempo em que seleciona colunas específicas do seu texto. Com essas colunas selecionadas você pode copiar, recortar ou excluir cada uma que precisar.

informação relacionada