私は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
言及したsed
、perl
とコマンドはawk
正確かもしれませんが、すべて読んでください。圧縮データを入力し、その中に改行文字を数えます。これらの改行は、圧縮されていないデータの改行とは無関係です。
圧縮されていないデータの行数を計算するには、解凍できません。あなたのアプローチがzcat
正しいアプローチであり、データが大きすぎるため〜する開梱には時間がかかります。
圧縮と解凍を処理するほとんどのユーティリティは、gzip
これを行うために同じ共有ライブラリルーチンを使用する可能性が高いです。作業を高速化する唯一の方法は、zlib
基本ルーチンよりも高速なルーチン実装を見つけて、zcat
それを使用するために再構築することです。