![Несколько аргументов с использованием xargs.](https://rvso.com/image/36041/%D0%9D%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B0%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2%20%D1%81%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC%20xargs..png)
Я знаю, что 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 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
команды.