Vários argumentos usando xargs.

Vários argumentos usando xargs.

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 readcomo 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 curlpor 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:

Agendamento simples

Em vez disso, o GNU Parallel gera um novo processo quando um deles termina - mantendo as CPUs ativas e economizando tempo:

Agendamento paralelo GNU

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 awkpode ser usada para isso.

$ awk '{system("curl -v www.google.com/"$1"/testing/"$2"/"$3"/works/"$4)}' file.txt

Aqui file.txtcontém os argumentos para curlo comando.

informação relacionada