Я создаю двоичные файлы данных, которые представляют собой просто ряд записей, объединенных вместе. Каждая запись состоит из (двоичного) заголовка, за которым следуют двоичные данные. В двоичном заголовке строка ascii содержит 80 символов. Где-то в пути мой процесс написания файлов немного перепутался, и я пытаюсь отладить эту проблему, проверяя, как долго каждая запись на самом деле.
Это кажется чрезвычайно связанным, но я не понимаю perl, поэтому я не смог получить принятый ответ на работу. Другой ответ указывает на bgrep
, который я скомпилировал, но он хочет, чтобы я подал ему шестнадцатеричную строку, и я бы предпочел просто иметь инструмент, где я могу дать ему строку ascii, и он найдет его в двоичных данных, напечатайте строку и смещение байта, где она была найдена.
Другими словами, я ищу инструмент, который действует следующим образом:
tool foobar filename
или
tool foobar < filename
и его вывод выглядит примерно так:
foobar:10
foobar:410
foobar:810
foobar:1210
...
например. строка, которая соответствует и смещение байта в файле, где началось совпадение. В этом примере я могу сделать вывод, что каждая запись имеет длину 400 байтов.
Другие ограничения:
- Возможность поиска по regex классная, но мне не нужна эта проблема.
- Мои двоичные файлы большие (3.5Gb), поэтому я хотел бы, если возможно, не читать весь файл в памяти.