Несколько аргументов с использованием xargs.

Несколько аргументов с использованием xargs.

Я знаю, что xargs может принимать много подобных аргументов.

xargs -n5 -I{} echo {}

но как мне поместить аргументы в определенное место, чтобы сделать что-то вроде.

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

Как можно достичь чего-то подобного?

решение1

Я не думаю, что вы можете сделать это напрямую с помощью xargs. Либо используйте read, как предлагает Костас, либо сделайте:

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

Или создайте URL-адрес, а затем передайте его xargs:

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

решение2

Можно подумать, что вы изобрели синтаксис для GNU Parallel:

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

Вы получаете дополнительное преимущество, поскольку на каждый процессор будет работать по одному curlэкземпляру.

GNU Parallel — это универсальный распараллеливатель, позволяющий легко запускать задания параллельно на одной машине или на нескольких машинах, к которым у вас есть доступ по SSH.

Если у вас есть 32 различных задания, которые вы хотите запустить на 4 ЦП, то прямой способ распараллеливания — запустить 8 заданий на каждом ЦП:

Простое планирование

Вместо этого GNU Parallel запускает новый процесс после завершения предыдущего, сохраняя при этом активными ЦП и, таким образом, экономя время:

Параллельное планирование GNU

Монтаж

Если GNU Parallel не упакован для вашего дистрибутива, вы можете выполнить персональную установку, которая не требует доступа root. Это можно сделать за 10 секунд, выполнив следующее:

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

Другие варианты установки см.http://git.savannah.gnu.org/cgit/parallel.git/tree/README

Узнать больше

Смотрите больше примеров:http://www.gnu.org/software/parallel/man.html

Посмотрите вступительные видеоролики:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Пройдите обучение:http://www.gnu.org/software/parallel/parallel_tutorial.html

Подпишитесь на рассылку, чтобы получить поддержку:https://lists.gnu.org/mailman/listinfo/parallel

решение3

system()awkДля этого можно использовать функцию .

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

Здесь file.txtсодержатся аргументы для curlкоманды.

Связанный контент