如何基于样本表实现Bash脚本中样本对的循环分析?
批量成对处理DNA/RNA样本的Bash循环实现方案
需求背景
需要批量成对处理IPDID_DNA和IPDID_RNA样本,并传入对应purity值,基于samplesheet.txt中的每行样本对自动循环执行分析脚本,替代手动单样本执行的方式。
样本表格式(samplesheet.txt)
dna_sample_id rna_tumor_sample_id purity Sample1_DNA Sample1_RNA 0.9 Sample2_DNA Sample2_RNA 0.1
手动执行的单样本参考脚本
IPDID_DNA="Sample1_DNA" IPDID_RNA="Sample1_RNA" IPDID_Folder="IPDID_DNA" dna_sample_id=${IPDID_DNA} dna_sample_pair_id=${IPDID_DNA} dna_sample_output_id=${IPDID_DNA} rna_tumor_sample_id=${IPDID_RNA} rna_tumor_sample_pair_id=${IPDID_RNA} rna_tumor_sample_output_id=${IPDID_RNA} purity="0.9" singularity exec \ --no-home \ -B /data:/data \ -W /data \ docker.sif \ bash process.sh \ --output_directory ${IPDID_Folder} \ --reference_fasta_file genome.fa \ --dna_tumor_id ${dna_sample_id} \ --dna_tumor_pair_id ${dna_sample_pair_id} \ --dna_tumor_output_id ${dna_sample_output_id} \ --dna_tumor_purity ${purity} \ --rna_tumor_id ${rna_tumor_sample_id} \ --rna_tumor_pair_id ${rna_tumor_sample_pair_id} \ --rna_tumor_output_id ${rna_tumor_sample_output_id} \ --rna_tumor_localapp_run_directory ${ANALYSIS_OUTPUT_DIR}
批量循环实现脚本
# 定义全局变量(根据实际环境调整) ANALYSIS_OUTPUT_DIR="/path/to/your/analysis/output" SINGULARITY_IMAGE="docker.sif" REFERENCE_FASTA="genome.fa" # 跳过表头,逐行读取样本表数据 tail -n +2 samplesheet.txt | while read -r dna_sample rna_sample purity; do # 跳过空行 [[ -z "$dna_sample" ]] && continue # 赋值当前样本的相关变量 IPDID_Folder="${dna_sample}" dna_sample_id="${dna_sample}" dna_sample_pair_id="${dna_sample}" dna_sample_output_id="${dna_sample}" rna_tumor_sample_id="${rna_sample}" rna_tumor_sample_pair_id="${rna_sample}" rna_tumor_sample_output_id="${rna_sample}" # 打印当前处理信息,便于日志追踪 echo "开始处理样本对: DNA=${dna_sample}, RNA=${rna_sample}, Purity=${purity}" # 执行分析命令 singularity exec \ --no-home \ -B /data:/data \ -W /data \ "${SINGULARITY_IMAGE}" \ bash process.sh \ --output_directory "${IPDID_Folder}" \ --reference_fasta_file "${REFERENCE_FASTA}" \ --dna_tumor_id "${dna_sample_id}" \ --dna_tumor_pair_id "${dna_sample_pair_id}" \ --dna_tumor_output_id "${dna_sample_output_id}" \ --dna_tumor_purity "${purity}" \ --rna_tumor_id "${rna_tumor_sample_id}" \ --rna_tumor_pair_id "${rna_tumor_sample_pair_id}" \ --rna_tumor_output_id "${rna_tumor_sample_output_id}" \ --rna_tumor_localapp_run_directory "${ANALYSIS_OUTPUT_DIR}" # 检查命令执行状态,输出结果 if [[ $? -eq 0 ]]; then echo "样本对 ${dna_sample}/${rna_sample} 处理完成" else echo "样本对 ${dna_sample}/${rna_sample} 处理失败,错误码: $?" >&2 fi done
关键说明
tail -n +2 samplesheet.txt:跳过样本表的表头行,仅读取实际样本数据while read -r dna_sample rna_sample purity:逐行解析每行的三个字段,分别赋值给对应变量- 加入日志打印和执行状态检查,方便追踪处理进度和排查问题
- 全局变量集中定义,后续环境调整时只需修改顶部变量即可
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

