シェル操作のための限られたキューを作成するには?

シェル操作のための限られたキューを作成するには?

ソートしたい1000個のgzip圧縮ファイルがあります。

この操作を順番に実行すると、プロセスは非常に簡単に見えます。

find . -name *.gz -exec zcat {} | sort > {}.txt \;

上記のコードが動作するかどうかはわかりませんが(どこでミスをしたら修正してください)、理解できたらと思います。

とにかく、プロセス全体をより速くするためにungzip / sort操作を並列化したいと思います。また、1000個のプロセスが同時に実行されるのを見たくありません。設定可能な容量を持つ限られた作業キュー(JavaのBlockingQueueや.NETのBlockingCollectionなど)があれば良いでしょう。この場合、10個のプロセスのみが並列に実行されます。

シェルでこれを行うことはできますか?

ベストアンサー1

GNU並列処理を使用する:

find . -name *.gz | parallel --files 'zcat {} | sort' | parallel -X -j1 sort -m {} ';' rm {} > sorted

次のように簡単にGNU Parallelをインストールできます。

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel

詳しくは、紹介ビデオをご覧ください。https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1このチュートリアル(man parallel_tutorial)を見てください。あなたはコマンドラインが大好きです。

おすすめ記事