2016-07-29 4 views
0

Я хотел бы обработать 2000 файлов на 64-ядерном компьютере. У меня есть питон скрипт foo.py который я бегу, как это:Как запускать задачи параллельно в bash без GNU parallel

cat file0000.txt|./foo.py > out0000.txt 

В идеале я хотел бы разделить файлы 2000 file0000.txt для file01999.txt в сорока устанавливает каждый размером 50 и запустить foo.py на каждом наборе в параллельны друг другу. Для множеств 1 до 4 из 40, что было бы эквивалентно следующее:

cat file00[0-4][0-9] |./foo.py > outfile1.txt & 
cat file00[5-9][0-9] |./foo.py > outfile2.txt & 
cat file01[0-4][0-9] |./foo.py > outfile3.txt & 
cat file01[5-9][0-9] |./foo.py > outfile4.txt & 

К сожалению, система Я бегу это на не parallel, так что я должен сделать это без того очень полезный инструмент.

Bash script processing commands in parallel выглядит похоже, но самый популярный ответ напрямую не применим, а второй самый популярный ответ использует parallel, к которому у меня нет доступа.

+0

Что такое проблема с параметрами 'xargs' и' -P max-procs'? – Alper

+0

@Alper Это может быть ответом, но я никогда не использовал его. Как бы вы использовали его для моей проблемы? – eleanora

+1

Что-то вроде 'ls -1 | xargs -I {} -P 5 sh -c "cat {} | ./foo.py> out {}. txt" ', Примечание:' ls -1' должен содержать список ваших входных файлов и изменять '-P 5' как тебе нравится. – Alper

ответ

1

По комментариям: Сделайте личную установку GNU Parallel которой разрешено делать, если вам разрешено запускать свои собственные сценарии:

./configure --prefix=$HOME && make && make install 

И потом:

ls | ~/bin/parallel 'cat {} | ./foo.py > {= s/file/out/ =}' 
Смежные вопросы