我正在尝试将四个大文件连接成两个。文件 *_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
也生成了这四个大文件并且它工作正常。
- 问题可能是什么?
- 我还必须使用哪些其他选项来连接 gzip 压缩文件而不使用
cat
?
我正在 CentOS 服务器上工作。我还有 197G 空间,所以这不应该是问题(或者至少应该显示错误)。
答案1
请注意,这些文件是压缩的。因此,如果不先解压缩文件,则不能wc -l
直接使用文件来计算文件中的原始行数。
可以用于cat
连接这些类型的压缩文件,因为生成的文件本身就是有效的压缩文件。稍后解压缩会产生一个文件,该文件是两个文件中未压缩数据的串联。
cat A_1P.gz B_1P.gz >C_1P.gz
要计算 中的行数C_1P.gz
:
zcat C_1P.gz | wc -l
或者
gunzip -c C_1P.gz | wc -l
或者
gzip -dc C_1P.gz | wc -l
但请注意,我们需要解压缩文件来计算行数,否则我们将计算文件压缩算法作为压缩数据的一部分生成的“随机”换行符(这些与未压缩文件中的行无关) )。