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 bash
guió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 C
programa 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 cmp
señ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