Попытка использовать GNU Parallel с sed

Почему эта строка ничего не делает? Я пытаюсь запустить команду "sed" параллельно, и она ничего не выводит в "standard.txt"

$ Filetemp = файл, который я редактирую потоком

standard.txt = файл, который я выводю в

cat $Filetemp | parallel --pipe sed -e "s/[[:space:]]\+/ /g" > standard.txt

Это оригинальный код, который работает просто отлично, но занимает слишком много времени:

sed -e "s/[[:space:]]\+/ /g" $Filetmp > standard.txt

GNU Parallel Version: 20130922

Lubuntu 14.04

6
задан 23 June 2014 в 20:22

2 ответа

Когда я выполняю это на случайном файле, я получил проблему синтаксиса. Необходимо заключить команду в кавычки:

cat $Filetemp | parallel --pipe 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt

, Если это все еще не работает на Вас, протестируйте echo $Filetemp (или выберите файл вручную), или удалите перенаправление, таким образом, Вы видите вывод, как это происходит (на всякий случай существует своего рода странная проблема перезаписи).

5
ответ дан 23 June 2014 в 20:22

Начиная с версии 20140422 Параллель GNU имела --pipepart который высокоэффективен:

parallel -a $Filetemp --pipepart 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt

И от версии 20161222 можно использовать --block -1 который прервет $Filetemp в один блок на jobslot:

parallel -a $Filetemp --block -1 --pipepart 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt

Это может поставить больше чем 1 ГБ/с для каждого ядра, что означает Ваш, вероятно, ограничены вводом-выводом. Вы видите если это случай путем взгляда на:

iostats -dkx 1

Если использование составляет 100%, то диск является узким местом.

0
ответ дан 23 November 2019 в 07:55

Другие вопросы по тегам:

Похожие вопросы: