Múltiples arguments usando xargs.

Sé que xargs puede tomar muchos arguments como ese.

xargs -n5 -I{} echo {} 

pero ¿cómo pongo los arguments en una location particular? Quiero hacer algo así como.

 xargs -n5 -I{} curl www.google.com/{1}/testing/{2}/{3}/works/{5} 

¿Cómo se puede lograr algo así?

No creo que puedas hacer esto directamente con xargs . O use read como sugiere Costas, o hacer:

 xargs -n5 sh -c 'curl "http://www.google.com/${1}/testing/${2}/${3}/works/${5}"' curl-command 

O construye la URL, luego xargs a xargs :

 awk '{printf "http://www.google.com/%s/testing/%s/%s/works/%s\n", $1, $2, $3, $5}' | \ xargs -L1 curl 

Casi pensarías que has inventado la syntax para GNU Parallel:

 ... | parallel -N5 curl www.google.com/{1}/testing/{2}/{3}/works/{5} 

Obtiene el beneficio adicional de que ejecutará un curl por CPU.

GNU Parallel es un paralelizador general y hace que sea fácil ejecutar trabajos en paralelo en la misma máquina o en varias máquinas a las que tiene acceso ssh.

Si tiene 32 trabajos diferentes que desea ejecutar en 4 CPU, una manera directa de paralelizar es ejecutar 8 trabajos en cada CPU:

Programación simple

En cambio, GNU Parallel genera un nuevo process cuando uno finaliza, manteniendo las CPU activas y ahorrando time:

Programación paralela de GNU

Instalación

Si GNU Parallel no está empaquetado para su distribución, puede hacer una installation personal, que no requiere acceso a la raíz. Se puede hacer en 10 segundos al hacer esto:

 (wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash 

Para otras opciones de installation, vea http://git.savannah.gnu.org/cgit/parallel.git/tree/README

Aprende más

Vea más ejemplos: http://www.gnu.org/software/parallel/man.html

Mira los videos introductorios: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Repase el tutorial: http://www.gnu.org/software/parallel/parallel_tutorial.html

Regístrese para get la list de correo electrónico para get asistencia: https://lists.gnu.org/mailman/listinfo/parallel

system() de awk se puede usar para esto.

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

Aquí file.txt contiene los arguments para curl command.