Как извлечь часть (не начало) файла.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 должен раздуваться с начала файла архива из-за алгоритма сжатия.