
Как проверить длину конвейерного ввода? Я пытаюсь:
echo "A" | xargs sh -c 'echo ${#$1}'
Также:
echo "A" | xargs sh -c 'echo ${#\"$1\"}'
На основеответы здесь, для примера, не относящегося к трубе.
решение1
Как@стив написал, просто используйте wc -c
для подсчета количества байтов. Смотрите man wc
другие варианты.
echo
добавляет новую строку в конец вывода, поэтому вы получите на один символ больше, чем могли бы ожидать при подсчете. Используйте printf
для более строгого контроля вывода.
решение2
Допустим, вы хотите выполнить команду, если длина аргумента меньше 2:
seq 100 | parallel echo '{= length($_) >= 2 and skip =}'
Он также будет выполнять задания параллельно — по одному на каждом ядре.
Примечание: GNU Parallel — это не тот же Parallel, что в moreutils.
GNU Parallel — это универсальный распараллеливатель, позволяющий легко запускать задания параллельно на одной машине или на нескольких машинах, к которым у вас есть доступ по SSH.
Если у вас есть 32 различных задания, которые вы хотите запустить на 4 ЦП, то прямой способ распараллеливания — запустить 8 заданий на каждом ЦП:
Вместо этого GNU Parallel запускает новый процесс после завершения предыдущего, сохраняя при этом активными ЦП и, таким образом, экономя время:
Монтаж
По соображениям безопасности вам следует установить 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