Выводить только блоки размером n со смещением, кратным шагу k от начала двоичного ввода в оболочке

Учитывая размер блока n и другой размер k, я ищу способ вывода только блоков со смещением от начала ввода, кратного k.

представьте себе файл, состоящий из нескольких 4-х наборов 2-байтовых данных. Теперь, учитывая этот вход, я хочу только первую запись каждого кортежа.

Пример ввода:

00 00 11 11 22 22 33 33
44 44 55 55 66 66 77 77
88 88 99 99 aa aa bb bb
cc cc dd dd ee ee ff ff

Пример вывода с n=2 и k=8:

00 00 44 44 88 88 cc cc

который является только первым "столбцом" ввода.

Теперь, хотя это было бы просто сделать в Perl, Python, мне нужна эта функциональность в сценарии оболочки, поскольку целевая система не имеет Perl или Python, а только базовые утилиты. Я надеюсь, что есть способ неправильно использовать существующий инструмент для этого. Если это невозможно, я напишу что-нибудь на C, но я бы хотел этого избежать.

Один из вариантов использования - извлечь один аудиоканал из необработанного аудиофайла.

1 ответ

Термин, который вы можете искать (кроме "полосок зебры") - это "шаг". Это то, что некоторые люди называют этой идеей пропуска каждый раз по k байтов.

Это не совсем понятно из вашего поста, но похоже, что вы действительно хотите иметь возможность вставить этот фильтр в конвейер, чтобы он потреблял необработанные байты и выводил то же самое. Если это так, я не уверен, как это можно легко сделать простым сценарием оболочки, поэтому я бы посоветовал вам либо сойти с ума и написать его на C, либо установить Python или что-то еще установленное в целевой системе.

Другие вопросы по тегам