Lin*_*ket 3 shell compression cat
我试图将四个大文件连接成两个。文件 *_1P.gz 包含的行数与对应的 *_2P.gz 行数相同。
文件A_1P.gz
和A_2P.gz
两者都包含1104507560
行。
文件B_1P.gz
和B_2P.gz
两者都包含1182136972
行。
但是,cat A_1P.gz B_1P.gz > C_1P.gz| wc -l
返回186974687
行和cat A_2P.gz B_2P.gz > C_2P.gz| wc -l
返回182952523
行,因此两者不仅比两个输入文件小得多(它们的长度应该超过 2B 行,而小于 2M),而且它们的行数也不同。运行的命令没有显示任何错误。
我无法理解发生了什么,我也生成了这四个大文件cat
并且它运行正常。
cat
?我在 CentOS 服务器上工作。我还有 197G 的空间,所以这应该不是问题(或者至少应该显示错误)。
Kus*_*nda 11
请注意,文件是压缩的。因此,您不能wc -l
直接在文件上使用来计算其中的原始行数,而无需先解压缩它们。
可以cat
用于连接这些类型的压缩文件,因为生成的文件本身就是一个有效的压缩文件。稍后解压缩它会产生一个文件,该文件是来自两个文件的未压缩数据的串联。
cat A_1P.gz B_1P.gz >C_1P.gz
Run Code Online (Sandbox Code Playgroud)
要计算 中的行数C_1P.gz
:
zcat C_1P.gz | wc -l
Run Code Online (Sandbox Code Playgroud)
或者
gunzip -c C_1P.gz | wc -l
Run Code Online (Sandbox Code Playgroud)
或者
gzip -dc C_1P.gz | wc -l
Run Code Online (Sandbox Code Playgroud)
但请注意,我们需要解压缩文件以计算行数,否则我们将计算文件压缩算法作为压缩数据的一部分生成的“随机”换行符(这些与未压缩文件中的行无关)。