Параллельно GNU - как обрабатывать разделитель столбцов без пробелов или новой строки? - PullRequest
1 голос
/ 21 февраля 2020

Мне известен следующий сценарий.

doit() {
  echo Doing it for $1
  sleep 2
  echo Done with $1
}

export -f doit
parallel --colsep ',' -0 doit ::: 1, 2, 3

Выход1-желаемый:

Выполнение за 1
Выполнено за 1
Выполнение за 2
Выполнено за 2
Делаем это за 3
Готово с 3

Но, в моем случае, у меня нет пробела ' ' между аргументами. Вот мой код.

doit() {
  echo Doing it for $1
  sleep 2
  echo Done with $1
}

export -f doit
parallel --colsep ',' -0 doit ::: 1,2,3

И я получаю следующий вывод.

Вывод 2:

Делаем это за 1
Готово с 1

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

Ответы [ 2 ]

3 голосов
/ 23 февраля 2020

Использование -d не --colsep:

#!/usr/bin/env bash

doit() {
  local c
  for c; do
    echo Doing it for $c
    sleep 2
    echo Done with $c
  done
}

export -f doit
parallel -d ',' doit ::: 1,2,3
0 голосов
/ 21 февраля 2020

Это то, что требуется:

#!/usr/bin/env bash

doit() {
  echo Doing it for $1
  sleep 2
  echo Done with $1
}

export -f doit
parallel doit ::: $(IFS=,; read -ra A <<< 1,2,3; echo "${A[@]}")

Когда вы используете --colsep, parallel отделяет один аргумент и передает doit

...