xargsを使用して複数行を結合する方法

xargsを使用して複数行を結合する方法

30M行を含む大きな入力ファイルがあります\r\n。 1000行(残りのファイルの場合はそれ以下)チャンクをcurl

私は以下を試しました:

< input.xt tr -d '\r' | xargs -P 8 -r -d '\n' -n 1000 -I {} curl -s -X POST --data-binary '{}' http://...

\r複数の文字に分割できないように見えるので、最初に入力から 'を削除しました。trxargs

ただし、上記のコマンドは、(パラメータのために)8つのプロセスが並列に接続されているにcurlもかかわらず、まだプロセスに対して1行しか提供していないようです。curl-P 8

curl並列性を維持しながら1000行のチャンクを渡すようにこのコマンドを変更するにはどうすればよいですか?

私はラインがランダムな順序でRESTサービスに到着することを知っていますが、これは私のユースケースに適しています。

ベストアンサー1

GNU Parallelは以下のために作成されました:

< input.xt parallel -P 8 -d '\r\n' -n 1000 curl -s -X POST --data-binary '{}' http://...

\r\n を保存するには、--pipeデフォルトで ~1MB チャンクを渡す 。

< input.xt parallel -P 8 --pipe curl -s -X POST --data-binary @- http://...

おすすめ記事