猫は大容量ファイルに対しては機能しません

猫は大容量ファイルに対しては機能しません

4つの大きなファイルを2つにリンクしようとしています。 *_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、2つのファイルは2つの入力ファイルよりはるかに小さいだけでなく、(長さは2B行以上でなければなりませんが、実際には2M未満です)、行数も異なります。エラーを表示せずにコマンドが実行されます。

何が起こっているのか理解できません。catこれら4つの大きなファイルも作成しましたが、正常に動作しました。

  • 何が問題なのでしょうか?
  • gzipファイルを使用せずにリンクするには、他のどのオプションを使用する必要がありますかcat

私はCentOSサーバーで作業しています。まだ197Gのスペースがあるので問題ありません(または少なくともエラーが表示されるはずです)。

ベストアンサー1

これらのファイルは次のとおりです。圧縮。したがって、最初にファイルを解凍しないと、ファイルをwc -l直接使用してファイルの元の行数を数えることはできません。

cat結果ファイル自体が有効な圧縮ファイルであるため、このタイプの圧縮ファイルをリンクするために使用できます。後で解凍すると、2つのファイルの非圧縮データを関連付けたファイルが作成されます。

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

ただし、行数を数えるにはファイルを解凍する必要があります。それ以外の場合は、圧縮データの一部としてファイル圧縮アルゴリズムによって生成された「ランダム」改行文字を計算します(これは圧縮されていないファイルの行とは関係ありません)。

おすすめ記事