Artwork from anime 'mono'
620 words
3 minutes
SRA数据下载与FASTQ转换
1. 安装软件
推荐创建独立环境:
conda create -n sra \ -c conda-forge \ -c bioconda \ sra-tools pigz seqkit
conda activate sra检查安装:
prefetch --versionfasterq-dump --versionpigz --versionseqkit version2. 设置 accession 和工作目录
ACC="SRRXXXXXXXX"WORKDIR="/path/to/sra_data"
mkdir -p "$WORKDIR"cd "$WORKDIR"将:
SRRXXXXXXXX替换为实际的 SRA run accession,例如 SRR、ERR 或 DRR 开头的编号。
3. 下载 SRA 数据
prefetch \ --max-size 100G \ --progress \ "$ACC"下载过程中如果出现:
transfer incompleteconnection failedretryingreopened, retrying通常表示网络中断后程序正在自动重试。
如果下载最终失败,不要删除已经生成的 accession 目录,直接重新执行相同命令:
prefetch \ --max-size 100G \ --progress \ "$ACC"检查下载进程:
pgrep -af "prefetch.*${ACC}"检查已下载的数据大小:
du -sh "$ACC"4. 检查下载目录
下载完成后通常会生成:
SRRXXXXXXXX/├── SRRXXXXXXXX.sra├── SRRXXXXXXXX.sra.vdbcache└── 其他依赖文件部分 accession 可能包含额外的参考序列依赖文件。
这些文件属于同一个 SRA 数据包,不要单独移动或删除。
5. 验证下载完整性
vdb-validate "$ACC"也可以直接验证 .sra 文件:
vdb-validate "$ACC/$ACC.sra"验证通过后再进行 FASTQ 转换。
6. 创建输出和临时目录
mkdir -p fastq tmp检查磁盘空间:
df -h .df -h ./tmpfasterq-dump 转换时可能产生大量未压缩 FASTQ 和临时文件,应预留足够空间。
7. 转换为双端 FASTQ
fasterq-dump "$ACC" \ --split-files \ -e 16 \ -t ./tmp \ -O ./fastq \ -p参数含义:
--split-files 将双端 reads 分为 R1 和 R2-e 16 使用 16 个线程-t ./tmp 指定临时目录-O ./fastq 指定输出目录-p 显示转换进度双端数据通常生成:
fastq/SRRXXXXXXXX_1.fastqfastq/SRRXXXXXXXX_2.fastq单端数据通常只生成:
fastq/SRRXXXXXXXX.fastq8. 压缩 FASTQ
双端数据:
pigz -p 16 \ "fastq/${ACC}_1.fastq" \ "fastq/${ACC}_2.fastq"单端数据:
pigz -p 16 "fastq/${ACC}.fastq"压缩后得到:
fastq/SRRXXXXXXXX_1.fastq.gzfastq/SRRXXXXXXXX_2.fastq.gz或者:
fastq/SRRXXXXXXXX.fastq.gz9. 检查 FASTQ 文件
检查 gzip 完整性:
gzip -t fastq/*.fastq.gz查看 FASTQ 统计:
seqkit stats fastq/*.fastq.gz对于双端数据,应重点确认 R1 和 R2 的 reads 数量一致。
10. 泛用完整脚本
#!/usr/bin/env bash
set -euo pipefail
ACC="${1:?Usage: $0 <SRA_ACCESSION> [WORKDIR]}"WORKDIR="${2:-$PWD}"THREADS="${THREADS:-16}"MAX_SIZE="${MAX_SIZE:-100G}"
mkdir -p "$WORKDIR"cd "$WORKDIR"
prefetch \ --max-size "$MAX_SIZE" \ --progress \ "$ACC"
vdb-validate "$ACC"
mkdir -p fastq tmp
fasterq-dump "$ACC" \ --split-files \ -e "$THREADS" \ -t ./tmp \ -O ./fastq \ -p
shopt -s nullglob
fastq_files=(fastq/"${ACC}"*.fastq)
if (( ${#fastq_files[@]} == 0 )); then echo "Error: no FASTQ files were generated for $ACC" >&2 exit 1fi
pigz -p "$THREADS" "${fastq_files[@]}"
gzip -t fastq/"${ACC}"*.fastq.gzseqkit stats fastq/"${ACC}"*.fastq.gz保存为:
download_sra.sh添加执行权限:
chmod +x download_sra.sh运行:
./download_sra.sh SRRXXXXXXXX /path/to/sra_data也可以只指定 accession,默认下载到当前目录:
./download_sra.sh SRRXXXXXXXX SRA数据下载与FASTQ转换
https://blog.lihuax.online/posts/work/dev/sra/