Команда или сценарий для чтения двоичного файла и пропуска некоторых байтов каждые X байтов

Я пытаюсь найти команду оболочки Android, которая может читать файл, но имеет возможность пропускать, например, 512 байт каждые 1024 байта.

Существует ли такая команда и доступна ли она для Android-устройств?

Я просмотрел документацию dd , но не смог понять, можно ли использовать dd для этой цели. Можно заставить dd пропускать байты в начале файла, можно заставить читать X байтов из файла, но я не вижу, как получить ту функцию, которую я описал.

РЕДАКТИРОВАТЬ:

Для моей цели команда/скрипт должна выводить на стандартный вывод, а обработка будет считывать вывод как поток, поэтому это не будет что-то вроде «cat файл, сделать обработку, cat файл». Это как "пока верно; сделать cat файл; готово | обработка".

Список доступных команд находится здесь: http://www.busybox.net/downloads/BusyBox.html

Ответы (1)

Вы должны попробовать использовать этот bash-скрипт, который я написал для вас (требуется busybox на вашем Android):

поместите скрипт в файл с именем script.bash (измените свой собственный путь):

#!/system/xbin/bash
# sputnick 20120928 http://android.stackexchange.com/posts/30069

binfile=<THE PATH OF YOUR BIN FILE>
bytes=$(wc -c < $binfile)
c=0 count=0

while ((count < bytes - (1024+512) )); do
    dd 2>/dev/null if=$binfile bs=512 count=2 skip=$c
    printf '\n\n'
    ((count += 1024+512 ))
    ((c+=3))
done

Теперь в терминале на вашем компьютере (это для linux, адаптируйте, если используете Windows)

adb push script.bash /mnt/sdcard/script.bash
adb shell
bash
chmod +x /mnt/sdcard/script.bash
/mnt/sdcard/script.bash

редактировать

Это то, что скрипт делает в порядке :

dd 2>/dev/null if=/tmp/bin bs=512 count=2 skip=0
dd 2>/dev/null if=/tmp/bin bs=512 count=2 skip=3
dd 2>/dev/null if=/tmp/bin bs=512 count=2 skip=6
dd 2>/dev/null if=/tmp/bin bs=512 count=2 skip=9
(...)
Это, безусловно, должно работать, но я вижу две детали, которые можно было бы улучшить для моей цели. Сначала я хочу, чтобы он выводился на стандартный вывод, а не в несколько файлов. Я думаю, вы можете исправить это, просто удалив опцию of. Другое дело, что я не знаю, приводит ли вызов dd несколько раз к накладным расходам на открытие/закрытие файла несколько раз, что делает процесс менее эффективным, чем должен быть.
Скрипт был отредактирован под ваши нужды. Если вы знаете лучший способ, чем вызывать dd несколько раз, скажите мне, как ;)