Abra un archivo en una posición determinada y lea un byte en bash

Abra un archivo en una posición determinada y lea un byte en bash

Dado que dos personas ya votaron para cerrar esta publicación, intentaré dejar la pregunta lo más clara posible. Un archivo en un dispositivo físico se representa como una secuencia binaria. Dicho esto, lo que debo hacer es verificar las diferencias entre las representaciones de dos archivos en ese nivel (es decir, necesito comparar las diferencias entre varios bytes en la misma posición en dos archivos diferentes) y generar dichas diferencias. en un bashguión.

Ejemplo:

file1: 00000000 01010101 10101010 11001100 00110011

file2: 00000000 01010101 01010101 00110011 00110011

El script debería generar:

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

O algo parecido a esto.

Entonces, lo primero que debo hacer para lograr esto es al menos poder abrir un archivo en una posición determinada y leer un byte y generar/almacenar dicho byte. Podría escribir un Cprograma para hacer eso, pero¿Hay alguna manera de hacer esto dentro?bash?

Respuesta1

Puedes probar cmp. Comparará dos archivos byte por byte.

Deman cmp:

cmp - compare two files byte by byte

Aunque el número de líneas debe ser igual en dos archivos. También tenga en cuenta que cmpseñalará solo la primera diferencia; para señalar las siguientes diferencias, puede omitir bytes específicos desde el principio.

$ 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 los diferentes valores de bytes utilice cmp -l, desde man cmp:

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

Respuesta2

Puedes probar con vimdiff:

vimdiff -b file1 file2

ingrese la descripción de la imagen aquí

información relacionada