Diff: Como você compara apenas os primeiros n caracteres em cada linha?

1

Eu tenho dois arquivos de log que estão sendo gerados a partir de dados binários decodificados. Os decodificadores são um pouco diferentes e estou tentando isolar as diferenças na saída. Para fazer isso, estou diferenciando os dois arquivos de log, o que funciona muito bem, exceto que os carimbos de hora são diferentes para cada linha. Por certas razões, as diferenças nos timestamps não são relevantes, então eu quero que o diff as ignore.

Como os arquivos de log seguem um formato específico, posso simplesmente excluir os últimos ~ 40 caracteres de cada linha para ignorar os carimbos de hora. EX:

Linha A:

[T9] | ENTRY NAME                       varA             = 0000012B  varB             = 00000000 | 000015.508.107.113s | file.cpp              :738

Linha B:

[T9] | ENTRY NAME                       varA             = 0000012B  varB             = 00000000 | 000015.508.107.163s | file.cpp              :738

Essas linhas devem ser tratadas como idênticas no meu caso.

Como posso dizer ao diff para incluir apenas os primeiros n caracteres de cada linha ou excluir os últimos m caracteres de cada linha?

    
por TheBat 18.08.2016 / 17:40

1 resposta

6

No bash, você pode usar a substituição de processos.

Para remover os últimos 40 caracteres, você pode usar

diff <(sed 's/.\{40\}$//' file1) \
     <(sed 's/.\{40\}$//' file1)

Para selecionar os primeiros 40, você pode usar

cut -c1-40 file
    
por 18.08.2016 / 17:48