Разделить большой файл .gz и gzip каждый из разделенного файла?

У меня большой файл text.gz (2 ГБ), и я хочу разбить его по строке. Я попытался использовать:

zcat text.gz | split -l1000000

Однако это создало огромный файл (около 92 ГБ, прежде чем я его прекратил), и наложил слишком много нагрузки на жесткий диск. Можно ли перевести его в gzip на лету?

2 Solutions collect form web for “Разделить большой файл .gz и gzip каждый из разделенного файла?”

Это можно сделать с помощью небольшой программы perl.

Я нажал сюда: ftp://ftp.sqsol.co.uk/pub/tools/zsplit/

Взгляните на него и не стесняйтесь изменять его в соответствии с вашими личными потребностями.

Вот цикл вокруг awk и gzip , который разделит файл на границах линии и сжимает части по мере их появления:

 # Generate files part0.dat.gz, part1.dat.gz, etc. prefix="part" count=0 suffix=".dat" lines=10000 # Split every 10000 line. zcat thefile.dat.gz | while true; do partname=${prefix}${count}${suffix} # Use awk to read the required number of lines from the input stream. awk -v lines=${lines} 'NR <= lines {print} NR == lines {exit}' >${partname} if [[ -s ${partname} ]]; then # Compress this part file. gzip --best ${partname} (( ++count )) else # Last file generated is empty, delete it. rm -f ${partname} break fi done 

Чтобы воссоздать исходный файл, просто zcat part*.dat.gz | gzip --best >thefile1.dat.gz zcat part*.dat.gz | gzip --best >thefile1.dat.gz . Сжатый файл может иметь другую контрольную сумму MD5 из оригинала из-за изменения параметров сжатия gzip , но несжатые файлы будут абсолютно идентичными.

Interesting Posts
Давайте будем гением компьютера.