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

1

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

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.

Então, a primeira coisa que eu preciso fazer para conseguir isso é pelo menos ser capaz de abrir um arquivo em uma determinada posição e ler um byte e exportar / armazenar tal byte. Eu poderia escrever um programa C para fazer isso, mas existe uma maneira de fazer isso dentro de bash ?

    
por kos 25.03.2015 / 12:31

2 respostas

4

Você pode tentar cmp . Ele irá comparar dois arquivos byte por byte.

Em man cmp :

cmp - compare two files byte by byte

Embora o número de linhas deva ser igual em dois arquivos. Observe também que cmp apontará apenas para a primeira diferença, para apontar para as próximas diferenças, é possível ignorar 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 byte, use cmp -l , de man cmp :

   -l, --verbose
          output byte numbers and differing byte values
    
por heemayl 25.03.2015 / 12:36
1

Você pode tentar com vimdiff :

vimdiff -b file1 file2

    
por Sylvain Pineau 25.03.2015 / 12:47