分割gz檔並單獨解壓縮

分割gz檔並單獨解壓縮

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

我的問題是:

  1. 那可能嗎 ?
  2. 另外,作為答案的一部分,是否也可以提供命令,因為我不太熟悉這些命令

謝謝

答案1

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大約十分之一的設置未壓縮的檔案大小,並且在每次迭代中skip從 0 增加 1。


更新:使用者想要計算未壓縮資料中的行數(請參閱問題附帶的註解)。這很容易完成,無需將未壓縮資料的任何部分儲存到磁碟:

$ gunzip -c file.gz | wc -l

gunzip -c將解壓縮檔案並將未壓縮的資料寫入標準輸出。wc帶有該標誌的實用程式將從-l該流中讀取資料並計算讀取的行數。

答案2

嗯,split很樂意以各種方式為你分擔。

要製作 10 個單獨的部分,您必須知道未壓縮檔案的大小。以下應該為您提供每個大小約為 1 GiB 的檔案。

gunzip < bigfile.gz | split --line-bytes=1G - bigfile-split

對於一個文字檔案來說 1G 仍然很大,許多編輯器都不能很好地處理這麼大的檔案。因此,根據您真正想用它做什麼,您可能想要進行較小的分割。或者只是將其保留為gz,對於其他工具來說已經足夠好了zgrep,即使它每次都必須解壓縮。

如果這是一個日誌文件,您可能需要微調日誌輪轉,以自然地產生較小的分割。

相關內容