Gzip

拆分gz文件並單獨解壓

  • April 16, 2017

我有一個很大的 .gz 文件,它本身就是 2.6 GB。由於大小限制,我無法解壓縮它。該文件是一個大文本文件。由於大小限制,我無法完全解壓縮它。我想將它分成 10 個單獨的部分並單獨解壓縮每個部分,以便我可以使用每個單獨的文件:

我的問題是:

  1. 那可能嗎 ?
  2. 另外,作為答案的一部分,如果還可以提供命令,因為我不太精通這些命令

謝謝

壓縮格式支持解壓一個由幾個較小的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

(ETC。)

使用大約是未壓縮bs文件大小的十分之一的設置,並且在每次迭代中從 0 開始遞增 1。skip


更新:使用者想要計算未壓縮數據中的行數(請參閱問題所附的評論)。這很容易實現,無需將任何部分的未壓縮數據儲存到磁碟:

$ gunzip -c file.gz | wc -l

gunzip -c將解壓縮文件並將未壓縮的數據寫入標準輸出。帶有標誌的wc實用程序-l將從該流中讀取併計算讀取的行數。

引用自:https://unix.stackexchange.com/questions/359312