Mehrere Argumente mit xargs.

Mehrere Argumente mit xargs.

Ich weiß, dass xargs auf diese Weise viele Argumente annehmen können.

xargs -n5 -I{} echo {}

aber wie platziere ich die Argumente an einer bestimmten Stelle, an der ich so etwas tun möchte?

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

Wie kann so etwas erreicht werden?

Antwort1

Ich glaube nicht, dass Sie das direkt mit machen können xargs. Verwenden Sie entweder readdas, was Costas vorschlägt, oder führen Sie Folgendes aus:

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

Oder erstellen Sie die URL und übergeben Sie sie dann an xargs:

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

Antwort2

Man könnte fast meinen, Sie hätten die Syntax für GNU Parallel erfunden:

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

curlSie erhalten den zusätzlichen Vorteil, dass Sie einen pro CPU ausführen .

GNU Parallel ist ein allgemeiner Parallelisierer und erleichtert die parallele Ausführung von Jobs auf derselben Maschine oder auf mehreren Maschinen, auf die Sie per SSH-Zugriff zugreifen können.

Wenn Sie 32 verschiedene Jobs haben, die Sie auf 4 CPUs ausführen möchten, können Sie die Parallelisierung ganz einfach durchführen, indem Sie auf jeder CPU 8 Jobs ausführen:

Einfache Terminplanung

GNU Parallel startet stattdessen einen neuen Prozess, wenn einer fertig ist – wodurch die CPUs aktiv bleiben und Zeit gespart wird:

GNU Parallel-Planung

Installation

Wenn GNU Parallel nicht für Ihre Distribution gepackt ist, können Sie eine persönliche Installation durchführen, für die kein Root-Zugriff erforderlich ist. Dies ist in 10 Sekunden erledigt, indem Sie Folgendes tun:

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

Weitere Installationsoptionen finden Sie unterhttp://git.savannah.gnu.org/cgit/parallel.git/tree/README

Erfahren Sie mehr

Weitere Beispiele:http://www.gnu.org/software/parallel/man.html

Sehen Sie sich die Einführungsvideos an:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Gehen Sie das Tutorial durch:http://www.gnu.org/software/parallel/parallel_tutorial.html

Melden Sie sich für die E-Mail-Liste an, um Unterstützung zu erhalten:https://lists.gnu.org/mailman/listinfo/parallel

Antwort3

system()awkHierzu kann die Funktion von verwendet werden.

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

Hier file.txtsind die Argumente für curlden Befehl enthalten.

verwandte Informationen