Abra um arquivo em uma determinada posição e leia um byte no bash

Abra um arquivo em uma determinada posição e leia um byte no bash

Como duas pessoas já votaram para encerrar este post, tentarei deixar a questão o mais clara possível. Um arquivo em um dispositivo físico é representado como uma sequência binária. Dito isto, o que preciso fazer é verificar as diferenças entre as representações de dois arquivos em tal nível (ou seja, preciso comparar as diferenças entre vários bytes na mesma posição em dois arquivos diferentes) e gerar tais diferenças em um bashroteiro.

Exemplo:

file1: 00000000 01010101 10101010 11001100 00110011

file2: 00000000 01010101 01010101 00110011 00110011

O script deve gerar:

differences: Byte 3 (file 1: 01010101; file2 10101010), Byte 4 (file1: 11001100; file 2: 00110011)

Ou algo nesse sentido.

Portanto, a primeira coisa que preciso fazer para conseguir isso é pelo menos poder abrir um arquivo em uma determinada posição e ler um byte e gerar/armazenar esse byte. Eu poderia escrever um Cprograma para fazer isso, masexiste uma maneira de fazer isso dentrobash?

Responder1

Podes tentar cmp. Ele comparará dois arquivos byte por byte.

Deman cmp:

cmp - compare two files byte by byte

Embora o número de linhas deva ser igual em dois arquivos. Observe também que cmpapontará apenas para a primeira diferença; para apontar para as próximas diferenças, você pode pular bytes específicos desde o início.

$ cat foo 
this is
a test
$ cat bar
this
is a test
$ cmp foo bar 
foo bar differ: byte 5, line 1
$ cmp -b foo bar 
foo bar differ: byte 5, line 1 is  40    12 ^J

Para imprimir os diferentes valores de bytes cmp -l, use, from man cmp:

   -l, --verbose
          output byte numbers and differing byte values

Responder2

Você pode tentar com vimdiff:

vimdiff -b file1 file2

insira a descrição da imagem aqui

informação relacionada