unpigzを使用してください。

unpigzを使用してください。

私は7.6GBのgzipファイルのレコードをカウントしようとしています。zcatこのコマンドの使用方法はほとんどありません。

$ zcat T.csv.gz | wc -l
423668947

この方法は機能しますが、時間がかかりすぎます(計算に10分以上)。私は次のようなより多くの方法を試しました。

$ sed -n '$=' T.csv.gz
28173811
$ perl -lne 'END { print $. }' < T.csv.gz
28173811
$ awk 'END {print NR}' T.csv.gz
28173811

3つのコマンドはすべて非常に高速に実行されますが、誤った数の28173811が表示されます。

最小時間でレコード計算を実行するには?

ベストアンサー1

言及したsedperlとコマンドはawk正確かもしれませんが、すべて読んでください。圧縮データを入力し、その中に改行文字を数えます。これらの改行は、圧縮されていないデータの改行とは無関係です。

圧縮されていないデータの行数を計算するには、解凍できません。あなたのアプローチがzcat正しいアプローチであり、データが大きすぎるため〜する開梱には時間がかかります。

圧縮と解凍を処理するほとんどのユーティリティは、gzipこれを行うために同じ共有ライブラリルーチンを使用する可能性が高いです。作業を高速化する唯一の方法は、zlib基本ルーチンよりも高速なルーチン実装を見つけて、zcatそれを使用するために再構築することです。

おすすめ記事