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

使用Snakemake批量合并样本染色体文件的技术实现问询

批量合并样本染色体文件的实现方案

需求说明

需要对sample1至sample4共4个样本,分别合并每个样本对应的chr1、chrX、chrM三个独立文件,最终生成以下指定路径的合并文件:

result/sample1_merged_chr1XM.txt
result/sample2_merged_chr1XM.txt
result/sample3_merged_chr1XM.txt
result/sample4_merged_chr1XM.txt

手动合并命令示例

(注:原示例存在笔误,已修正为对应样本的chr1文件)

cat dirToFiles/sample1_chr_1_data.txt dirToFiles/sample1_chr_X_data.txt dirToFiles/sample1_chr_M_data.txt > result/sample1_merged.txt
cat dirToFiles/sample2_chr_1_data.txt dirToFiles/sample2_chr_X_data.txt dirToFiles/sample2_chr_M_data.txt > result/sample2_merged.txt
cat dirToFiles/sample3_chr_1_data.txt dirToFiles/sample3_chr_X_data.txt dirToFiles/sample3_chr_M_data.txt > result/sample3_merged.txt
cat dirToFiles/sample4_chr_1_data.txt dirToFiles/sample4_chr_X_data.txt dirToFiles/sample4_chr_M_data.txt > result/sample4_merged.txt

可复现代码(生成测试文件+Snakemake规则)

步骤1:生成待合并的测试文件

用于创建模拟的样本染色体文件,方便验证合并逻辑:

#######################################
#Step 1: 创建待合并的多个文件
######################################

import subprocess
subprocess.run((['mkdir','-p', 'dirToFiles']))

SAMPLES = ["sample1", "sample2", "sample3", "sample4"]
CHROMS=["1", "X", "M"]

for sample in SAMPLES:
    for chrom in CHROMS:
        subprocess.run((['touch', f'dirToFiles/{sample}_chr_{chrom}_data.txt']))
        # 原代码中这条echo命令写法有误,无法正常写入内容,已注释

for sample in SAMPLES:
    for chrom in CHROMS:
        f = open(f'dirToFiles/{sample}_chr_{chrom}_data.txt', "w")
        f.write(f'dirToFiles/{sample}_chr_{chrom}_data.txt')
        f.close()

# 也可使用Snakemake的expand语法批量生成文件路径:
# expand("dirToFiles/{sample}_chr_{chrom}_data.txt", sample=SAMPLES, chrom=CHROMS)

步骤2:Snakemake规则编写

通过Snakemake实现批量自动化合并:

#################################
#Step 2: Snakemake 规则
#################################
SAMPLES = ["sample1", "sample2", "sample3", "sample4"]
CHROMS = ["1", "X", "M"]

rule all:
    input: expand("result/{sample}_merged_chr1XM.txt", sample=SAMPLES)


rule combineFiles:
    input:
        expand("dirToFiles/{sample}_chr_{chrom}_data.txt", chrom=CHROMS, partial=True)
    output:
        "result/{sample}_merged_chr1XM.txt"
    log: 
        "logs/{sample}_merged_chr1XM.txt"
    shell:
       """
cat {input} > {output} &> {log}
       """

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:05:37