GNU Parallel: Как получить стандартный ввод из параллельного канала GNU, как если бы он был из файла? - PullRequest
1 голос
/ 12 марта 2019

Предположим, у меня есть следующая команда, которая работает так:

my_command -f file

Как настроить параллель таким образом, чтобы содержимое передавалось по конвейеру, как если бы это был канал?

# For example, in pseudo code: 

cat item | parallel my_command -f <(the incoming stdin)

Важно сделать это таким образом, так как я обрабатываю определенные порции данных с помощью опции --speadstdin, поэтому, если есть способ перенаправить ввод по каналу, как если бы он исходил из файла, это решило бы для ситуации.

1 Ответ

1 голос
/ 13 марта 2019

Вы ищете --cat или --fifo:

cat file | parallel --pipe --cat my_command -f {}

Быстрее, но требует my_command прочитать весь файл от начала до конца один раз и только один раз:

cat file | parallel --pipe --fifo my_command -f {}

Быстрее, но требует file - настоящий файл:

parallel -a file --pipepart --block -1 --fifo my_command -f {}

См. Также главу 9.6 в GNU Parallel 2018 (Online: https://doi.org/10.5281/zenodo.1146014 Напечатано: http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html).

...