xargs
オプションで使用しています--max-args=0
(または-P 0
)。
ただし、プロセスの出力は、stdout
適切な行分離を考慮せずにストリームにマージされます。だから私はしばしば次のような行になります:
<start-of-line-1><line-2><end-of-line-1>
パターン全体で出力全体を使用egrep
し^
ているので、xargs
これは結果を台無しにします。
xargs
プロセス出力を順番に(1つのプロセスの出力が連続している限り、任意の順序で)強制的に書き込む方法はありますか?
または他の解決策はありますか?
編集:ユースケースの詳細:
さまざまなホストからWebページをダウンロードして解析したい。すべてのページの読み込みに約1秒かかり、リクエストを並列化する必要があるページが数十個あるため。
私のコマンドの形式は次のとおりです。
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
ホストIP($ IPs変数)およびその他のデータは含まれているbashファイルから取得されるため、Perlのようなものではなくbashを使用します。
これに対する解決策は難しく、各プロセスの標準出力に異なるファイル記述子を使用し、小さなサーバーを使用して行を収集する必要があります。
—
ステファンギメネス
xargs
そのような機能を提供していないようです。
@カレブそこに行く、これが役立つことを願って:
—
クリストフワーム
確かに軽量なソリューションではありませんが、多分あなたは
—
ステファンギメネス
make
のジョブ機能を使用できmake
ます。出力行を適切にマージすると思います。
--line-buffered
フラグを追加するのにegrep
役立ちます
xargs
。