web-dev-qa-db-ja.com

xargsを使用した進行状況の追跡

Xargsを使用して、次のような一連の入力パラメーターに対してコマンドを実行しています。

cat <someinput> | xargs -n 1 -P 5 <somecmd>

入力ファイルは本当に長く、実行に長い時間がかかります。したがって、コマンドプロンプトが表示されるのを待っています。完了した入力引数の数の進行状況バーを表示する方法はありますか?

「バー」を使用してみましたが、常に「無限」のスループットが得られました。 xargsはコマンドを実行する前に入力全体を読み取るようです。

http://i.stack.imgur.com/5Wsgx.gif

11
Utkarsh Sinha

GNU Parallelを使用している場合は、次のコマンドを実行できます。

cat <someinput> | parallel --bar -P 5 <somecmd>

GNU Parallelは、一般的なパラレライザーであり、同じマシン上で、またはsshにアクセスできる複数のマシン上で、ジョブを簡単に並列実行できます。

4つのCPUで実行する32の異なるジョブがある場合、並列化する簡単な方法は、各CPUで8つのジョブを実行することです。

Simple scheduling

代わりに、GNU Parallelは、プロセスが終了すると新しいプロセスを生成します-CPUをアクティブに保ち、時間を節約します。

GNU Parallel scheduling

インストール

個人用インストールでは、rootアクセスは必要ありません。これを行うと、10秒で完了します。

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

他のインストールオプションについては http://git.savannah.gnu.org/cgit/parallel.git/tree/README を参照してください

詳細

その他の例を見る: http://www.gnu.org/software/parallel/man.html

紹介ビデオを見る: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

チュートリアルをご覧ください: http://www.gnu.org/software/parallel/parallel_tutorial.html

サポートを受けるには、メーリングリストにサインアップしてください: https://lists.gnu.org/mailman/listinfo/parallel

13
Ole Tange

あなたはpvを使うことができます:

cat <someinput> | pv -p -s sizeof_someimput | xargs -n 1 -P 5 <somecmd>

これにより、someimputの読み取り値がどこにあるかがわかるので、someimputの処理がどこにあるかがおおよそわかります。

9
DrGkill

進行状況の一般的な指標だけを探している場合、最も簡単な方法は、実行するコマンドを実行する前にエコーすることです。

例:cat <someinput> | xargs -I{} sh -c 'echo {}; <somecmd>;'

-I{}セット{}現在処理中の文字列へ

sh -cを使用すると、複数のコマンドを実行できます(注:すべてのコマンドが必要な後はセミコロン最後のコマンドを含む

3
Zaheer