2016-03-15 2 views
0

Я новичок в bash-скриптах. Я написал небольшой скрипт, содержащий набор команд с использованием определенных объявленных переменных (например, SAMPLENAME = Alex). Теперь я хочу, чтобы каждый цикл зацикливал этот скрипт с разными значениями объявленных переменных (например, SAMPLENAME = John) из файла.Как скомпилировать скрипт bash с разными значениями переменных каждый раз

Например: Я установил следующие значения переменных

#!/bin/bash 
tID=000H003HG.TAAGGCGA+GCGATCTA 
tSM=Alex 
tLB=lib1 
O_FOLDER_NAME=HD690_Alex 

Это команда, которая будет выполнена с использованием abolve значений переменных,

bwa mem -V -M -R "@RG\tID:${tID}\tSM:${tSM}\tPL:ILLUMINA\tLB:${tLB}"  REFERENCES/$REFERENCE.fa "<zcat OUTPUT/2_TRIMMED_DATA/$O_FOLDER_NAME/split-adapter-quality-trimmed/${O_FOLDER_NAME}-READ1.fastq.gz" "<zcat OUTPUT/2_TRIMMED_DATA/${O_FOLDER_NAME}/split-adapter-quality-trimmed/${O_FOLDER_NAME}-READ2.fastq.gz" > OUTPUT/3_MAPPED_READS/${O_FOLDER_NAME}/aligned_reads.sam 

Теперь после выполнения вышеуказанной команды, Я хочу, чтобы он работал со следующим набором значений для объявленных переменных,

#!/bin/bash 
tID=000998U3HG.STPUIHY+UIYUSIA 
tSM=John 
tLB=lib2 
O_FOLDER_NAME=HD700_John 

Спасибо!

ответ

1

Если у вас есть разделенных пробелами файл с полями tID, tSM, tLB и O_FOLDER_NAME, просто read тех.

while read -r tID tSM tLB O_FOLDER_NAME; do 
    bwa mem -V -M \ 
     -R "@RG\tID:${tID}\tSM:${tSM}\tPL:ILLUMINA\tLB:${tLB}" \ 
    REFERENCES/"$REFERENCE".fa \ 
    "<zcat OUTPUT/2_TRIMMED_DATA/$O_FOLDER_NAME/split-adapter-quality-trimmed/${O_FOLDER_NAME}-READ1.fastq.gz" \ 
    "<zcat OUTPUT/2_TRIMMED_DATA/${O_FOLDER_NAME}/split-adapter-quality-trimmed/${O_FOLDER_NAME}-READ2.fastq.gz" \ 
     > OUTPUT/3_MAPPED_READS/"${O_FOLDER_NAME}"/aligned_reads.sam 
done <file 

Если ваш входной файл в формате CSV, вам нужно будет возиться с IFS или что-то, но это основной принцип.

Для двух ваших примеров файл может содержать следующее.

000H003HG.TAAGGCGA+GCGATCTA Alex lib1 HD690_Alex 
000998U3HG.STPUIHY+UIYUSIA John lib2 HD700_John 

Если файл не использовать за пределами вашего скрипта, вы можете использовать вместо here document.

+0

Параметр ' " tripleee

+0

Итак, что я понял из вашего ответа, так это то, что все, что мне нужно сделать, - создать файл, разделенный пробелами. Например, tID tSM tLB и их разные значения ниже этой строки? или перед этой линией? После выполнения сценария один раз скрипт bash вызовет другой набор значений из файла? Пожалуйста, поправьте меня, если я не понимаю смысла. –

+0

См. Обновление только сейчас. – tripleee

0

способ сделать это, чтобы изменить файл переменных, -

#!/bin/bash 
echo tID=000H003HG.TAAGGCGA+GCGATCTA 
echo tSM=Alex 
echo tLB=lib1 
echo O_FOLDER_NAME=HD690_Alex 

, а затем запустить -

eval $(./var_file.sh) && your command 
Смежные вопросы