Получить часть двоичного файла, используя gnu-coreutils, bash

Я хочу получить часть двоичного файла, от байта #480161397 до #480170447 (включительно, всего 9051 байт)

я использую cut -bи я ожидал, что размер trunk1.gz будет 9051 байт, но я получаю другой результат.

$ wget https://commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2016-07/segments/1454701152097.59/warc/CC-MAIN-20160205193912-00264-ip-10-236-182-209.ec2.internal.warc.gz

$ cut -b480161397-480170447 CC-MAIN-20160205193912-00264-ip-10-236-182-209.ec2.internal.warc.gz >trunk1.gz

$ echo $((480170447-480161397+1))
9051

$ ls -l trunk1.gz
-rw-r--r--  1 david  staff     3400324 Sep  8 10:28 trunk1.gz

Что случилось?

2 ответа

Решение

Если вы работаете с бинарным, советую использовать dd команда.

dd if=trunk1.gz bs=1 skip=480161397 count=9051 of=output.bin

bs размер блока и установлен в 1 байт.

cut -bN-M копирует диапазон N-M байты из каждой строки ввода.

Пример:

$ cut -b4-7 <<END
0123456789
abcdefghij
ABCDEFGHIJ
END

Выход:

3456
defg
DEFG

Рассмотреть возможность использования dd для ваших целей.

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