ファイル分割を高速化するためにsplit
GNUを使用してLinuxコマンドを実行できますか?parallel
圧縮ファイルを読み取り、行数またはファイルサイズに応じて同じ部分に分割します。
私は次のように努力しています:
zcat file.gz | parallel --pipe --block 2000M 'gzip > {#}.gz'
ベストアンサー1
習慣。まず、ファイル分割はCPUバインディングではなくIOバインディングである可能性が高いため、問題を解決するためにCPUを追加しても役に立ちません。
gzip解凍自体は並列化できます。unpigz --stdout
代わりにgzipを使用してくださいzcat
。しかし、ボトルネックが原因でデータがファイルに書き込まれるため、これが大幅にスピードアップできるかどうか疑問です。
分割パイプラインの出力自体は本質的に逐次的なプロセスであるため、並列化は意味がないか理論的にも可能です。
だからあなたができる最速のことは
SIZE=10G # 10 GB output splits
unpigz --stdout | split -b ${SIZE} - outputfile_suffix_
1.事実ストレスを減らすできない実際に並列化 - 基本的に逐次的ですが、チェックサム計算とIO処理は解凍スレッドに加えて別々のスレッドで実行されるため、通常スループットはわずかにunpigz
増加します。