拆分gz文件并单独解压

Noo*_*oor 3 gzip

我有一个很大的 .gz 文件,它本身就是 2.6 GB。由于大小限制,我无法解压缩它。该文件是单个大文本文件。由于大小限制,我无法完全解压缩它。我想把它分成 10 个单独的部分,然后单独解压缩每个部分,以便我可以使用每个单独的文件:

我的问题是:

  1. 那可能吗 ?
  2. 另外,作为答案的一部分,如果也可以提供命令,因为我不太精通这些命令

谢谢

Kus*_*nda 9

gzip压缩格式支持解压已从几个较小的压缩文件级联文件(解压缩后的文件将包含串联解压缩数据),但它不支持解压缩削减了压缩文件。

假设您希望以解压数据的“切片”结束,您可以通过将解压数据输入dd多次来解决此问题,每次选择解压数据的不同切片以保存到文件并丢弃其余部分.

在这里,我使用了一个很小的示例文本文件。我反复解压缩它(这需要一些时间进行大型文件),每一次我选了一个8字节的片出来的解压缩数据。您可以这样做,但对bs("block size")使用更大的值。

$ 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
Run Code Online (Sandbox Code Playgroud)

(等等。)

使用bs大约为未压缩文件大小十分之一的设置,并在每次迭代中skip从 0增加一个。


更新:用户想要计算未压缩数据中的行数(请参阅问题所附的评论)。这很容易实现,无需将未压缩数据的任何部分存储到磁盘:

$ gunzip -c file.gz | wc -l
Run Code Online (Sandbox Code Playgroud)

gunzip -c将解压缩文件并将未压缩的数据写入标准输出。wc带有-l标志的实用程序将从该流中读取并计算读取的行数。