宏基因组Trim glaore质控+SPAdes组装

1、安装

安装gcc,GNU 编译器集,因为trim的cutadapt及其依赖需要用它来编译C扩展
sudo apt update && sudo apt install build-essential

Trim Galore:质量控制

点击查看代码
conda create -n trimgalore trim-galore
conda activate trimgalore
trim_galore --version
cutadapt --version
conda deactivate

SPAdes:组装

点击查看代码
conda create -n spades_env spades
conda activate spades_env
spades.py --version
conda deactivate
2、运行 构建批量下载脚本(单核)
点击查看代码
#!/bin/bash

# 原始测序数据文件夹
INPUT_DIR=/mnt/hgfs/Shared_by_Linux/CRR
# 输出路径
TRIM_DIR=/mnt/hgfs/Shared_by_Linux/CRR/results/trimmed
SPADES_DIR=/mnt/hgfs/Shared_by_Linux/CRR/results/spades

# 创建输出目录
mkdir -p "$TRIM_DIR"
mkdir -p "$SPADES_DIR"

# 日志文件
LOG_FILE="$SPADES_DIR/process.log"
: > "$LOG_FILE"  # 清空日志文件

source ~/miniconda3/etc/profile.d/conda.sh

# 获取样本数量,用于进度条
samples=("$INPUT_DIR"/*_f1.fq.gz)
total=${#samples[@]}
count=0

for f1 in "${samples[@]}"
do
    count=$((count+1))
    sample=$(basename "$f1" _f1.fq.gz)
    f2="$INPUT_DIR/${sample}_r2.fq.gz"

    # 检查配对文件是否存在
    if [ ! -f "$f2" ]; then
        echo "[$(date +"%Y-%m-%d %H:%M:%S")] 错误:缺少配对文件 $f2,跳过样本 $sample" | tee -a "$LOG_FILE"
        continue
    fi

    # 打印进度条
    percent=$((count*100/total))
    echo -ne "处理进度: $percent% ($count/$total) 样本: $sample\r"

    echo "[$(date +"%Y-%m-%d %H:%M:%S")] 处理样本:$sample" | tee -a "$LOG_FILE"

    # 激活 Trim Galore 环境,做质控
    echo "运行 trim_galore ..." | tee -a "$LOG_FILE"
    conda run -n trimgalore trim_galore --paired "$f1" "$f2" -o "$TRIM_DIR" >> "$LOG_FILE" 2>&1


    trimmed_f1="$TRIM_DIR/${sample}_f1_val_1.fq.gz"
    trimmed_f2="$TRIM_DIR/${sample}_r2_val_2.fq.gz"

    # 激活 spades 环境,做组装
    mkdir -p "$SPADES_DIR/$sample"
    echo "运行 spades ..." | tee -a "$LOG_FILE"
    conda run -n spades_env spades.py -meta -t 2 -m 2 -1 "$trimmed_f1" -2 "$trimmed_f2" -o "$SPADES_DIR/$sample" >> "$LOG_FILE" 2>&1

done


echo -e "\n全部样本处理完成!日志保存在 $LOG_FILE"

构建批量下载脚本(多核)
点击查看代码
#!/bin/bash

# 原始测序数据文件夹
INPUT_DIR=/mnt/hgfs/Shared_by_Linux/CRR
TRIM_DIR=/mnt/hgfs/Shared_by_Linux/CRR/results/trimmed
SPADES_DIR=/mnt/hgfs/Shared_by_Linux/CRR/results/spades

# 创建输出目录
mkdir -p "$TRIM_DIR"
mkdir -p "$SPADES_DIR"

# 日志文件(主日志)
LOG_FILE="$SPADES_DIR/process.log"
: > "$LOG_FILE"

source ~/miniconda3/etc/profile.d/conda.sh

# 定义每个样本的处理函数
process_sample() {
    sample="$1"
    f1="$INPUT_DIR/${sample}_f1.fq.gz"
    f2="$INPUT_DIR/${sample}_r2.fq.gz"
    trimmed_f1="$TRIM_DIR/${sample}_f1_val_1.fq.gz"
    trimmed_f2="$TRIM_DIR/${sample}_r2_val_2.fq.gz"
    sample_log="$SPADES_DIR/${sample}.log"

    echo "[$(date +"%F %T")] 开始处理样本 $sample" | tee -a "$LOG_FILE"

    if [[ ! -f "$f1" || ! -f "$f2" ]]; then
        echo "[$(date +"%F %T")] 缺少文件,跳过样本 $sample" | tee -a "$LOG_FILE"
        return
    fi

    echo "运行 trim_galore..." | tee -a "$sample_log"
    conda run -n trimgalore trim_galore -j 1 --paired "$f1" "$f2" -o "$TRIM_DIR" >> "$sample_log" 2>&1

    echo "运行 spades..." | tee -a "$sample_log"
    mkdir -p "$SPADES_DIR/$sample"
    conda run -n spades_env spades.py --meta -t 2 -m 4 -1 "$trimmed_f1" -2 "$trimmed_f2" -o "$SPADES_DIR/$sample" >> "$sample_log" 2>&1

    echo "[$(date +"%F %T")] 样本 $sample 完成" | tee -a "$LOG_FILE"
}

export INPUT_DIR TRIM_DIR SPADES_DIR LOG_FILE
export -f process_sample  # 导出函数以便 parallel 使用

# 获取所有样本名
samples=$(ls "$INPUT_DIR"/*_f1.fq.gz | xargs -n 1 basename | sed 's/_f1.fq.gz//')

# 并行执行,每次最多跑 4 个(可根据 CPU 调整)
#echo "$samples" | parallel -j 1 process_sample {}

echo "全部样本处理完成!日志见 $LOG_FILE"

cd /mnt/hgfs/Shared_by_Linux/CRR
chmod +x batch_trim_spades.sh
./batch_trim_spades.sh

注:
由于在Windows系统上编辑的脚本,脚本内含有^M回车符,建议转换后保存到新文件中再运行
nano batch_trim_spadea.sh
Ctrol+O
enter
Ctrol+X
tr -d '\r' < batch_trim_spades.sh > tmp.sh && mv tmp.sh batch_trim_spades.sh

posted @ 2025-08-05 16:37  Zarinan  阅读(34)  评论(0)    收藏  举报