我是bash脚本新手。我编写了一个包含使用已定义声明变量的命令集的小脚本(例如SAMPLENAME = Alex)。现在,我想要的是每次从文件中使用不同的声明变量值(例如SAMPLENAME = John)循环此脚本。
例如:我设置了以下变量值
#!/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
谢谢!
答案 0 :(得分: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。
答案 1 :(得分: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