Shell-Script

壓縮文件上的記錄計數和 cksum

  • November 8, 2022

有一個gz格式的40GB文件。我想以未壓縮格式查找此文件的記錄數和 cksum。我的一種方法是:

  1. 使用 gunzip 解壓文件
  2. 對解壓文件使用 wc、cksum 命令
  3. 使用 gzip 再次壓縮文件。

這種方法的問題是解壓縮和壓縮文件將花費大量時間。可能在 30-40 分鐘左右。另一種方法可能是使用 zcat 來計算記錄數和 cksum

  1. zcat |wc -l
  2. zcat |校驗和

這種方法可能需要更少的時間,但在同一個文件上使用 zcat 兩次。有更好的方法嗎?可能正在使用一個命令來查找記錄計數和 cksum?

您可以使用tee和 bash 的程序替換

$ zcat foo.gz | tee >(md5sum >&2) | wc
6f869e2acc27a0330b10d9ffa6655e7b  -
 36568   45710 2743552

這將文件解壓縮一次,將解壓縮的數據tee作為輸入文件傳遞給該文件,該文件md5sum被告知將其輸出列印到標準錯誤(因此不會被 擷取| wc),然後我們還將輸出傳遞給wc.

由於您似乎沒有磁碟空間問題,因此最簡單的方法是將文件解壓縮為一個臨時文件,然後在該文件上執行您的兩個命令。完成後,刪除臨時文件。

gunzip -c file.gz >tmpname
wc -l tmpname
cksum tmpname
rm tmpname

如果您願意,可以替換gunzip -c為。zcat

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