![Mehrere Argumente mit xargs.](https://rvso.com/image/36041/Mehrere%20Argumente%20mit%20xargs..png)
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 read
das, 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}
curl
Sie 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:
GNU Parallel startet stattdessen einen neuen Prozess, wenn einer fertig ist – wodurch die CPUs aktiv bleiben und Zeit gespart wird:
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()
awk
Hierzu kann die Funktion von verwendet werden.
$ awk '{system("curl -v www.google.com/"$1"/testing/"$2"/"$3"/works/"$4)}' file.txt
Hier file.txt
sind die Argumente für curl
den Befehl enthalten.