Existe algum utilitário que permita excluir colunas?

6

Por exemplo, eu tenho um arquivo de texto, cada linha é uma longa cadeia. Eu quero excluir 2 "segmentos" dessa string, digamos as colunas 1-7 e 20-22. Então, as duas linhas inferiores abaixo seriam uma correspondência:

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

Eu sei que o WinMerge tem um plug-in "IgnoreColumns", mas eu nunca trabalhei assim. Neste exemplo, eu iria renomeá-lo IgnoreColumns_1-7, 20-22.dll, selecione-o no menu de plug-ins e escolha "Pre-Differ". mas nunca funcionou.

Vou comparar arquivos enormes que não quero modificar. Não me oponho a stream editá-los na comparação com sed ou algo assim, mas eu preferiria não modificar os arquivos reais. Eu não escolhi alimentar sed para diff ainda só porque eu estava esperando por uma visão mais visual dos dados.

    
por user39160 29.07.2011 / 20:01

4 respostas

4

O seguinte funciona no Linux e no Cygwin.

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

Por algum motivo no Cygwin, o Vim solicita que cada arquivo tenha sido alterado desde o início da edição e pergunta "[O] K, (L) oad Arquivo:". Basta digitar O de cada vez.

Se você não conseguir ver as colunas omitidas, será uma comparação visual, lado a lado.

    
por 29.07.2011 / 21:45
3

Se você ainda quiser que o plug-in "IgnoreColumns" do WinMerge funcione ... parece que você está por perto. Duas notas:

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

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

Nota: Recomendo uma versão "suportada, mas não oficial" do WinMerge - 2.13.20.12 - que inclui comparações de três vias. Vá para WinMerge não oficial constrói e, na parte inferior, você verá o "3- maneira diff versão suportada ".

    
por 03.11.2012 / 04:57
1

Assim como a resposta do Diogo_Rocha, você pode modificar o arquivo antecipadamente para remover as colunas que você não quer testar, então execute o diff. Mas com apenas coisas de linha de comando.

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

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

Edit: Ataque de surpresa da melhor resposta de garyjohn.

diff -u <(cut -c8-19,23- test1.txt) <(cut -c8-19,23- test2.txt) | less
    
por 29.07.2011 / 21:03
0

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 fazê-lo com o aplicativo textpad . Instale-o e abra seu arquivo de texto e, em seguida, pressione a tecla "Alt" ao mesmo tempo que você seleciona colunas específicas do seu texto. Com essas colunas selecionadas, você pode copiar, cortar ou excluir cada uma delas.

    
por 29.07.2011 / 20:09