压缩文件上记录计数和 cksum

Gop*_*opi 7 bash compression shell-script checksum

有一个gz格式的40GB文件。我想查找cksum未压缩格式的该文件的记录数。我的一种方法是:

  1. 使用解压缩文件gunzip
  2. 对解压文件使用wc,命令cksum
  3. 使用 再次压缩文件gzip

这种方法的问题是提取和压缩文件将花费大量时间。可能需要 30-40 分钟左右。另一种方法可能是用来zcat计算记录数和cksum

  1. zcat <file name> | wc -l
  2. zcat <file name> | cksum

这种方法可能需要更少的时间,但zcat对同一个文件使用两次。有更好的方法吗?可能正在使用一个命令来查找记录计数和cksum

Mat*_*lis 6

moreutilsDebian(和其他地方)上的软件包包含一个通用 utils 的小宝库。

其中之一是pee(1)。它就像tee(1)但不将输出写入(多个)文件,而是通过管道将其传递给(多个)命令。使用起来极其简单直观;例如

$ zcat foo.gz | pee md5sum wc
0a22adb99b92b4c5ad6beba9694238a3  -
    403    2372   27766

Run Code Online (Sandbox Code Playgroud)

  • 哇,‘撒尿’太棒了 (2认同)

ter*_*don 5

您可以使用teebash 的进程替换

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

它将文件解压缩一次,将解压缩的数据传递给该数据tee,并将其作为输入文件传递给该文件,并md5sum告知该文件将其输出打印到标准错误(因此不会被 捕获| wc),然后我们还将输出传递给wc.