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

借助Slurm数组任务为VCF文件生成含样本名与Pos值的ID列

解决VCF文件添加样本名与Pos拼接ID列的问题

需求说明

原制表符分隔的VCF文件初始列为Chrom、Pos,需调整为Chrom、ID、Pos三列,其中ID格式为样本名_Pos值;136个样本名存储于IDs.txt,通过Slurm数组任务按ID提取对应样本名。

修正后的Slurm+Awk解决方案

调整Slurm脚本,将提取到的样本名传递给Awk,实现ID列的拼接与插入:

#!/bin/bash --login
#SBATCH --array=1-136

EXOME_IDs_FILE=/home/IDs.txt
# 获取当前数组任务对应的样本名
SAMPLE_NAME=$(sed -n "${SLURM_ARRAY_TASK_ID}p" "$EXOME_IDs_FILE")

# 处理VCF文件,生成带样本名后缀的新文件(避免批量任务覆盖)
awk -v sample="$SAMPLE_NAME" 'BEGIN{FS=OFS="\t"} 
# 处理表头行
NR==1 {
    print $1, "sample_variantpos_ID", $2
}
# 处理数据行,拼接样本名与Pos值作为ID
NR>1 {
    print $1, sample "_" $2, $2
}' original_file.vcf > "${SAMPLE_NAME}_modified.vcf"

关键说明

  1. 传递样本名到Awk:通过-v sample="$SAMPLE_NAME"将Bash变量传入Awk,解决之前无法获取样本名的问题
  2. 表头处理:直接输出调整后的三列表头
  3. 数据行拼接:用sample "_" $2实现样本名与Pos列($2)的拼接,生成符合要求的ID
  4. 避免文件覆盖:输出文件添加样本名后缀,适合Slurm批量任务场景

可选:直接修改原文件(不推荐)

如果需要直接覆盖原VCF文件,可使用临时文件中转:

#!/bin/bash --login
#SBATCH --array=1-136

EXOME_IDs_FILE=/home/IDs.txt
SAMPLE_NAME=$(sed -n "${SLURM_ARRAY_TASK_ID}p" "$EXOME_IDs_FILE")

awk -v sample="$SAMPLE_NAME" 'BEGIN{FS=OFS="\t"} 
NR==1 {
    $1 = $1 OFS "sample_variantpos_ID"
}
NR>1 {
    $1 = $1 OFS sample "_" $2
}1' file.vcf > tmp && mv tmp file.vcf

内容的提问来源于stack exchange,提问作者Amy Houseman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:31:01