
私はxargsがこのような多くの引数を受け入れることができることを知っています。
xargs -n5 -I{} echo {}
しかし、私が望む特定の場所にパラメータをどのように配置できますか?
xargs -n5 -I{} curl www.google.com/{1}/testing/{2}/{3}/works/{5}
そのような目標をどのように達成できますか?
答え1
を使って直接これを行うことはできないと思いますxargs
。 Costasが提案したとおりに使用するか、read
次の手順を実行します。
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 はタスクが完了すると新しいプロセスを作成し、CPU をアクティブに保つことで時間を節約します。
インストールする
ディストリビューションにGNU Parallelがパッケージされていない場合は、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
答え3
system()
この目的で関数をawk
使用できます。
$ awk '{system("curl -v www.google.com/"$1"/testing/"$2"/"$3"/works/"$4)}' file.txt
これにはfile.txt
コマンドのパラメータが含まれますcurl
。