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