Как извлечь часть (не начало) файла.gz?

У меня есть большой файл gz (11 ГБ), который я не могу распаковать на свой компьютер даже с 100 ГБ свободного места. Я извлек первые 50 ГБ с помощью команды:

gzip -cd file.gz | dd ibs=1024 count=50000000 > first_50_GB_file.txt

Мне удалось успешно разобрать мои данные из этой части файла. Теперь я хочу извлечь другую часть файла для анализа. Я попытался извлечь последние n строк из файла, а затем распаковать это следующим образом:

tail -50 file.gz > last_part_of_file.gz

Я надеялся, что потом смогу использовать:

gzip -cd last_part_of_file.gz | dd ibs=1024 count=50000000 > last_50_GB_file.txt

но команда tail занимает>10 минут для проверки только 50 строк.

Если у кого-то есть какие-либо решения о том, как извлечь (потенциально произвольные) части файла.gz, которые не включают начало, я был бы очень благодарен.

1 ответ

Решение

tail не может работать с двоичным файлом; tail -50 возвращает последние 50 строк в поисках разделителя '\n' (char 10).

gzip -cd file.gz | dd ibs=1024 count=50000000 > first_50_GB_file.txt

gzip -cd file.gz | dd ibs=1024 skip=50000000 > after_50_GB_file.txt

Я сначала извлек размер файла был 100 ГБ. Чтобы ограничить пространство до 50 ГБ

gzip -cd file.gz | dd ibs=1024 skip=50000000 count=50000000 > next_50-100_GB_file.txt

для следующих 50 ГБ

gzip -cd file.gz | dd ibs=1024 skip=100000000 count=50000000 > next_100-150_GB_file.txt

но каждый раз процесс gzip должен раздуваться с начала файла архива из-за алгоритма сжатия.

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