cat 对大文件不起作用

cat 对大文件不起作用

我正在尝试将四个大文件连接成两个。文件 *_1P.gz 包含与相应的 *_2P.gz 相同数量的行。

这些文件A_1P.gzA_2P.gz包含1104507560行。
这些文件B_1P.gzB_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

但请注意,我们需要解压缩文件来计算行数,否则我们将计算文件压缩算法作为压缩数据的一部分生成的“随机”换行符(这些与未压缩文件中的行无关) )。

相关内容