Команда Linux для получения байтового диапазона из файла

15

Я знаю это headи tailмогу использовать -cопцию для указания байтового смещения. Я ищу способ эффективно извлечь диапазон байтов из большого файла журнала.

Рамон
источник

Ответы:

17

DareDevil команд Unix, ddна помощь!

dd if=yourfile ibs=1 skip=200 count=100

Это будет начинаться с байта 200 и показывать 100 следующих байтов, или, другими словами, байты 200-300. ibsозначает, что dd читает только один байт за раз вместо 512 байтов по умолчанию, но все еще записывает в 512 байтовых блоках по умолчанию. Пойди и посмотри, ibsповредит ли это представление, надеюсь, нет.

Янне Пиккарайнен
источник
Для файла 782090815 байт я получил эти времена: time dd if=file.txt | wc -l= 00: 00: 03s. time dd if=file.txt ibs=1 count=782090815 | wc -l= 9:05:19
Данило Соуза Мораес
11

Если ваш интерес к байтам, будет odболее интересным.

-j, --skip-bytes=bytes
-N, --read-bytes=bytes

Таким образом, чтобы прочитать 16 байтов, начиная с 1024 байта, и вывести в ascii

od -j 1024 -N 16 -a /bin/sh
Sirch
источник
4

Вы можете использовать dd if=logfile of=pieceoflogfile skip=startingblock count=#ofblocks(возможно, bs=1чтобы получить однобайтовые блоки, в противном случае он использует блоки по 512 байт). Не уверен, насколько эффективно сказать ему записывать по одному байту за раз.

DerfK
источник
Ну, если касается относительно эффективности - 2 dd«s может быть труба приковано вместе (первый может разрезать толстый кусок и второй будет делать хорошую работу над трубой, а не диск), но ddимеет не только , bsно отдельно ibsи obsкак хорошо, так что в по крайней мере, это может привести к большим блокам, чем чтение
Пой
1

Предполагая, что файл не слишком велик (например, несколько ГБ или около того), конвейерная передача от одного к другому настолько эффективна, насколько это возможно, если не писать собственную программу для этого.

head ... file | tail ...

(Или наоборот. В зависимости от того.)

Игнасио Васкес-Абрамс
источник
1
tail должен идти первым для больших смещений, в противном случае начало вывода заголовка отбрасывается.
Проски