![Vários argumentos usando xargs.](https://rvso.com/image/36041/V%C3%A1rios%20argumentos%20usando%20xargs..png)
Eu sei que xargs pode aceitar muitos argumentos assim.
xargs -n5 -I{} echo {}
mas como coloco os argumentos em um local específico que desejo fazer algo parecido.
xargs -n5 -I{} curl www.google.com/{1}/testing/{2}/{3}/works/{5}
Como algo assim pode ser alcançado?
Responder1
Eu não acho que você possa fazer isso diretamente com xargs
. Use read
como Costas sugere ou faça:
xargs -n5 sh -c 'curl "http://www.google.com/${1}/testing/${2}/${3}/works/${5}"' curl-command
Ou crie o URL e passe-o para xargs
:
awk '{printf "http://www.google.com/%s/testing/%s/%s/works/%s\n", $1, $2, $3, $5}' | \
xargs -L1 curl
Responder2
Você quase pensaria que inventou a sintaxe do GNU Parallel:
... | parallel -N5 curl www.google.com/{1}/testing/{2}/{3}/works/{5}
Você obtém o benefício adicional de executar um curl
por CPU.
GNU Parallel é um paralelizador geral e facilita a execução de trabalhos em paralelo na mesma máquina ou em várias máquinas às quais você tem acesso ssh.
Se você tiver 32 jobs diferentes que deseja executar em 4 CPUs, uma maneira simples de paralelizar é executar 8 jobs em cada CPU:
Em vez disso, o GNU Parallel gera um novo processo quando um deles termina - mantendo as CPUs ativas e economizando tempo:
Instalação
Se o GNU Parallel não estiver empacotado para sua distribuição, você poderá fazer uma instalação pessoal, que não requer acesso root. Isso pode ser feito em 10 segundos fazendo o seguinte:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Para outras opções de instalação consultehttp://git.savannah.gnu.org/cgit/parallel.git/tree/README
Saber mais
Veja mais exemplos:http://www.gnu.org/software/parallel/man.html
Assista aos vídeos de introdução:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Percorra o tutorial:http://www.gnu.org/software/parallel/parallel_tutorial.html
Inscreva-se na lista de e-mail para obter suporte:https://lists.gnu.org/mailman/listinfo/parallel
Responder3
system()
função de awk
pode ser usada para isso.
$ awk '{system("curl -v www.google.com/"$1"/testing/"$2"/"$3"/works/"$4)}' file.txt
Aqui file.txt
contém os argumentos para curl
o comando.