Поскольку два человека уже проголосовали за закрытие этого поста, я постараюсь сделать вопрос максимально понятным. Файл на физическом устройстве представлен в виде двоичной последовательности. При этом мне нужно проверить различия между представлениями двух файлов на таком уровне (т. е. мне нужно сравнить различия между несколькими байтами в одной и той же позиции в двух разных файлах) и вывести эти различия в скрипте bash
.
Пример:
file1: 00000000 01010101 10101010 11001100 00110011
file2: 00000000 01010101 01010101 00110011 00110011
Скрипт должен вывести:
differences: Byte 3 (file 1: 01010101; file2 10101010), Byte 4 (file1: 11001100; file 2: 00110011)
Или что-то в этом роде.
Итак, первое, что мне нужно сделать, чтобы достичь этого, это иметь возможность хотя бы открыть файл в определенной позиции и прочитать один байт и вывести/сохранить этот байт. Я мог бы написать программу, C
чтобы сделать это, ноесть ли способ сделать это вbash
?
решение1
Можете попробовать cmp
. Он сравнит два файла побайтно.
Отman cmp
:
cmp - compare two files byte by byte
Хотя количество строк должно быть одинаковым в двух файлах. Также обратите внимание, что это cmp
будет указывать только на первое различие, чтобы указать на следующие различия, вы можете пропустить определенные байты с начала.
$ 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
Для печати различных значений байтов используйте cmp -l
, из man cmp
:
-l, --verbose
output byte numbers and differing byte values
решение2
Вы можете попробовать с vimdiff
:
vimdiff -b file1 file2