宏基因组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
点击查看代码
#!/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

浙公网安备 33010602011771号