You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于样本表实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:22:32