2013-09-04 7 views
1

У меня есть скрипт, который принимает три аргумента и работать так:Как сделать Гну-параллельно разделенным несколько входных файлов

myscript.sh input1.fa input2.fa out.txt

Скрипт считывает одну строку каждый из input1.fa и input2.fa, делает некоторые сравнения , и записывает результат в out.txt. Для двух входов требуется одинаковое количество строк, а out.txt также будет иметь такое же количество строк после завершения скрипта.

Можно ли распараллелить это с помощью GNU parallel?

Я не забочусь о том, что выход имеет другой порядок от входов, но мне нужно, чтобы сравнить i ю строчку input1.fa с i-й линии input2.fa. Кроме того, допустимо, если я получаю несколько выходных файлов (например, output{#}) вместо одного - я просто отправлю их cat.

Я нашел this темы, но ответ был не совсем тем, что я хотел. Я знаю, что могу split два входных файлов и обрабатывать их параллельно в парах с использованием xargs, но хотелось бы сделать это в одной строке, если это возможно ...

ответ

0

Если вы можете изменить myscript.sh, поэтому он читает труба и пишет к трубе можно сделать:

paste input1.fa input2.fa | parallel --pipe myscript.sh > out.txt 

Так MyScript вам нужно будет читать из STDIN и разделения на TAB, чтобы получить информацию от input1 и input2.

+0

Умный! Это будет быстрее, если для 'myscript.sh' потребуется больше времени для обработки и вывода в STDOUT, чем' paste', чтобы пройти весь файл, исправить? Говоря иначе, если 'myscript.sh' так же быстро, как' paste', то нет повышения производительности, правильно? – obk

+0

паста довольно быстро, поэтому ограничивающий фактор может быть параллельным. –