Почему эта строка ничего не делает? Я пытаюсь запустить команду "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
Когда я выполняю это на случайном файле, я получил проблему синтаксиса. Необходимо заключить команду в кавычки:
cat $Filetemp | parallel --pipe 'sed -e "s/[[:space:]]\+/ /g"' > standard.txt
, Если это все еще не работает на Вас, протестируйте echo $Filetemp
(или выберите файл вручную), или удалите перенаправление, таким образом, Вы видите вывод, как это происходит (на всякий случай существует своего рода странная проблема перезаписи).
Начиная с версии 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%, то диск является узким местом.