Распараллелить командный блок, который принимает аргументы, которые являются именами файлов и включают оператор if? - PullRequest
0 голосов
/ 26 октября 2019

У меня есть скрипт, который я несколько распараллелил для доступа к файлам из двух разных каталогов для различных процессов. Тем не менее, я сделал так, чтобы файлы были помещены в новый каталог, но поскольку у меня так много файлов (и ограничение по времени для выполнения каждого сценария), куда бы я добавил оператор if для своего сценария, чтобы он неанализировать тот же набор файлов?

#!/bin/bash
#SLURM CODE BlOCK

# Assemble reads if not already done
path=$PWD
for files in $path/Test_Folder/refs/*.fa
do
    REF=$(basename $files)
    if [ -e $path//${REF%%.fa}_dir ]  #check if directory exists
    then
        echo "Directory exists, skipping!"
    else
        parallel -j 1 "bwa mem -B 2 -M -t 2 $files {1} \
        > {1/.}_${REF%%.fa}.sam\
        && echo 'Running bwa mem for {2} using $REF'\
        & mkdir -p ${REF%%.fa}_dir \
        & mv {1/.}_${REF%%.fa}.sam ${REF%%.fa}_dir"\
        :::: < (ls Test_Folder/.fastq)
     fi
done

Но моя ошибка в том, что по какой-то причине он не может найти индексные файлы, которые находятся в той же папке, что и $ REF - это не было проблемой, нотеперь он просто не может их найти. Я думаю, потому что я больше не говорю ему для доступа к этой папке в параллельном цикле, когда я вызываю $ REF? Действительно странно.

РЕДАКТИРОВАТЬ: я исправил ошибку, у меня только что была опечатка в моем скрипте. По праву кажется, что я делаю то, что хочу, но я могу проверить это только через день или два после тестирования реальных больших файлов - он работает с крошечными файлами.

...