Миниатюрный консольный инструмент «setop» теперь доступен в Debian Stretch и в Ubuntu с версии 16.10. Вы можете получить его через
sudo apt install setop
Вот несколько примеров. Наборы, над которыми нужно работать, задаются как разные входные файлы :.
setop input # is equal to "sort input --unique"
setop file1 file2 --union # option --union is default and can be omitted
setop file1 file2 file3 --intersection # more than two inputs are allowed
setop file1 - --symmetric-difference # ndash stands for standard input
setop file1 -d file2 # all elements contained in 1 but not 2
Логические запросы возвращают только EXIT_SUCCESS
в случае истинности и EXIT_FAILURE
, а также сообщение в противном случае. Таким образом, setop можно использовать в оболочке.
setop inputfile --contains "value" # is element value contained in input?
setop A.txt B.txt --equal C.txt # union of A and B equal to C?
setop bigfile --subset smallfile # analogous --superset
setop -i file1 file2 --is-empty # intersection of 1 and 2 empty (disjoint)?
Также можно точно описать, как должны анализироваться входные потоки, фактически с помощью регулярных выражений:
setop input.txt --input-separator "[[:space:]-]"
означает, что пробел (i. е.\v
\t
\n
\r
\f
или пробел )или минус интерпретируется как разделитель между элементами (по умолчанию новая строка, т.е. е. каждая строка входного файла является одним элементом)setop input.txt --input-element "[A-Za-z]+"
означает, что элементами являются только слова, состоящие из латинских символов, все остальные символы считаются разделителями между элементами Кроме того, вы можете
--count
все элементы выходного множества, --trim
все входные элементы (i. е. удалить все нежелательные предшествующие и последующие символы, такие как пробел, запятая и т. д. ), --include-empty
, --ignore-case
, --output-separator
между элементами выходного потока (по умолчанию \n
), См. man setop
или github.com/phisigma/setop для получения дополнительной информации.
Существует множество инструментов, которые вы можете использовать, но я думаю, что лучший из них — параллельный GNU. Он значительно лучше xargs по гибкости и полезности. Ссылка — это описание параллелизма GNU для MacOS. Я думаю, вы обнаружите, что это, вероятно, лучшее решение для очередей, когда вы ищете.
Дополнительная информация об использовании parallel находится здесь .
Недавно я столкнулся с похожей проблемой. Насколько я знаю, у вас есть два варианта:
и
Например, чтобы преобразовать каждый flac-файл, найденный командой find
, в ogg, я попытался запустить:
find -name "*.flac" -print0 | xargs -0 -P 24 -L 1 oggenc
Одновременно выполняется до -P 24
процессов с использованием -L 1
строк из команды find
. Я уверен, что вы можете использовать это, чтобы настроить его в соответствии со своими потребностями, но нам потребуется больше деталей из вашего вопроса.