Sé que xargs puede aceptar muchos argumentos como este.
xargs -n5 -I{} echo {}
pero ¿cómo coloco los argumentos en una ubicación particular? Quiero hacer algo así.
xargs -n5 -I{} curl www.google.com/{1}/testing/{2}/{3}/works/{5}
¿Cómo se puede lograr algo así?
Respuesta1
No creo que puedas hacer esto directamente con xargs
. Utilice read
lo que sugiere Costas o haga:
xargs -n5 sh -c 'curl "http://www.google.com/${1}/testing/${2}/${3}/works/${5}"' curl-command
O cree la URL y luego pásela a xargs
:
awk '{printf "http://www.google.com/%s/testing/%s/%s/works/%s\n", $1, $2, $3, $5}' | \
xargs -L1 curl
Respuesta2
Casi pensarías que inventaste la sintaxis de GNU Parallel:
... | parallel -N5 curl www.google.com/{1}/testing/{2}/{3}/works/{5}
Obtiene el beneficio adicional de que ejecutará uno curl
por CPU.
GNU Parallel es un paralelizador general y facilita la ejecución de 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 forma sencilla de paralelizar es ejecutar 8 trabajos en cada CPU:
En cambio, GNU Parallel genera un nuevo proceso cuando uno finaliza, manteniendo las CPU activas y, por lo tanto, ahorrando tiempo:
Instalación
Si GNU Parallel no está empaquetado para su distribución, puede realizar una instalación personal, que no requiere acceso de root. Se puede hacer en 10 segundos haciendo esto:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Para otras opciones de instalación consultehttp://git.savannah.gnu.org/cgit/parallel.git/tree/README
Aprende más
Ver más ejemplos:http://www.gnu.org/software/parallel/man.html
Mira los vídeos de introducción:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
Sigue el tutorial:http://www.gnu.org/software/parallel/parallel_tutorial.html
Regístrese en la lista de correo electrónico para obtener ayuda:https://lists.gnu.org/mailman/listinfo/parallel
Respuesta3
system()
La función de awk
se puede utilizar para esto.
$ awk '{system("curl -v www.google.com/"$1"/testing/"$2"/"$3"/works/"$4)}' file.txt
Aquí file.txt
contiene los argumentos para curl
ordenar.