Múltiples argumentos usando xargs.

Múltiples argumentos usando xargs.

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

Programación sencilla

En cambio, GNU Parallel genera un nuevo proceso cuando uno finaliza, manteniendo las CPU activas y, por lo tanto, ahorrando tiempo:

Programación paralela GNU

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 awkse puede utilizar para esto.

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

Aquí file.txtcontiene los argumentos para curlordenar.

información relacionada