xargs はこのように多くの引数を取ることができることは知っています。
xargs -n5 -I{} echo {}
しかし、次のようにしたい特定の場所に引数を配置するにはどうすればよいでしょうか。
xargs -n5 -I{} curl www.google.com/{1}/testing/{2}/{3}/works/{5}
どうすればそのようなことが達成できるのでしょうか?
答え1
これを直接 で実行することはできないと思いますxargs
。Costasread
の提案どおりに使用するか、次のようにします。
xargs -n5 sh -c 'curl "http://www.google.com/${1}/testing/${2}/${3}/works/${5}"' curl-command
または、URL を構築して、それを に渡しますxargs
。
awk '{printf "http://www.google.com/%s/testing/%s/%s/works/%s\n", $1, $2, $3, $5}' | \
xargs -L1 curl
答え2
GNU Parallel の構文を自分で発明したのではないかと思うほどです。
... | parallel -N5 curl www.google.com/{1}/testing/{2}/{3}/works/{5}
curl
CPU ごとに1 つ実行されるという追加の利点も得られます。
GNU Parallel は汎用的な並列化ツールであり、同じマシン上または SSH アクセスできる複数のマシン上でジョブを並列に実行することを容易にします。
4 つの CPU で実行したい 32 個の異なるジョブがある場合、並列化するための最も簡単な方法は、各 CPU で 8 つのジョブを実行することです。
GNU Parallel は、代わりに、1 つのプロセスが終了すると新しいプロセスを生成します。これにより、CPU がアクティブな状態になり、時間が節約されます。
インストール
GNU Parallel がディストリビューションにパッケージ化されていない場合は、ルート アクセスを必要としない個人用インストールを行うことができます。次の操作を実行すると、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
答え3
system()
の機能をawk
使うとこれが可能になります。
$ awk '{system("curl -v www.google.com/"$1"/testing/"$2"/"$3"/works/"$4)}' file.txt
ここにはコマンドfile.txt
の引数が含まれますcurl
。