Разделить файл gz и распаковать отдельно

У меня большой файл .gz, который сам по себе составляет 2,6 ГБ. Я не могу распаковать его из-за ограничения размера. Файл представляет собой один большой текстовый файл. Я не могу полностью распаковать его из-за ограничения размера. Я хочу разбить его на 10 отдельных частей и распаковать каждый отдельно, чтобы я мог использовать каждый отдельный файл:

Мои вопросы:

  1. Это возможно ?
  2. Кроме того, как часть ответа, если команды также могут быть предоставлены, так как я не очень хорошо разбираюсь в этих командах

благодаря

2 Solutions collect form web for “Разделить файл gz и распаковать отдельно”

Формат сжатия gzip поддерживает распаковку файла, который был объединен из нескольких более мелких сжатых файлов (в распакованном файле будут содержаться конкатенированные распакованные данные), но он не поддерживает распаковку сжатого сжатого файла.

Предполагая, что вы захотите закончить «срез» распакованных данных, вы можете обойти это, подавая распакованные данные в dd несколько раз, каждый раз выбирая другой фрагмент распакованных данных для сохранения в файл и отбрасывая отдых.

Здесь я использую крошечный пример текстового файла. Я многократно его распаковываю (для больших файлов потребуется немного времени), и каждый раз я выбираю 8-байтовый фрагмент из распакованных данных. Вы бы сделали то же самое, но использовали гораздо большее значение для bs («размер блока»).

 $ cat file hello world 1 2 3 ABC $ gzip -f file # using -f to force compression here, since the example is so small $ gunzip -c file.gz | dd skip=0 bs=8 count=1 of=fragment 1+0 records in 1+0 records out 8 bytes transferred in 0.007 secs (1063 bytes/sec) $ cat fragment hello wo $ gunzip -c file.gz | dd skip=1 bs=8 count=1 of=fragment 1+0 records in 1+0 records out 8 bytes transferred in 0.000 secs (19560 bytes/sec) $ cat fragment rld 1 2 

(и т.д.)

Используйте параметр bs который составляет примерно одну десятую от размера несжатого файла, и при каждом увеличении итерации skip 0 на единицу.


UPDATE: пользователь хотел подсчитать количество строк в несжатых данных (см. Комментарии, связанные с вопросом). Это легко осуществить без необходимости хранить какую-либо часть несжатых данных на диске:

 $ gunzip -c file.gz | wc -l 

gunzip -c распакует файл и записывает несжатые данные в стандартный вывод. Утилита wc с флагом -l будет считывать из этого потока и подсчитывать количество прочитанных строк.

Хорошо, split будет радостно расколоть вещи для вас различными способами.

Чтобы сделать 10 отдельных частей, вам нужно знать размер несжатого файла. Ниже приведены файлы размером около 1 гигабайт.

 gunzip < bigfile.gz | split --line-bytes=1G - bigfile-split 

1G все еще много для текстового файла, многие редакторы плохо обрабатывают такие большие файлы. Поэтому, в зависимости от того, что вы действительно хотите с ним сделать, вы можете захотеть пойти на меньшие расколы. Или просто оставить его как gz , достаточно хорошо работает для zgrep и других инструментов, даже если он должен быть несжатым каждый раз.

Если это файл журнала, вы можете настроить мелодию вращения журнала, чтобы естественным образом создавать меньшие расщепления.

  • Как сделать фиктивное приложение считывает файлы gzip («на лету») без изменений кода
  • Отключить gzip-ошибки / предупреждения при использовании zgrep
  • Как может отсутствовать --compression в моем wget?
  • Gunzip несколько файлов и переименовать их
  • gzip-файлы с кошкой и из трубы дают разные результаты
  • Терминал замерзает после использования tar или gz
  • символьная ссылка perl в файле gz
  • Как рекурсивно распаковывать gz-файлы на удаленном хосте с ограниченными командами?
  • Файл Gzip без изменения inode
  • Почему tar-архивные форматы переключаются на сжатие xz для замены bzip2 и что с gzip?
  • переносная команда для распаковки и распаковки без GNU и старого unix
  • Linux и Unix - лучшая ОС в мире.