Important
NCBI提供了教程https://github.com/ncbi/sra-tools/wiki/08.-prefetch-and-fasterq-dump https://www.ncbi.nlm.nih.gov/books/NBK570248/ https://www.ncbi.nlm.nih.gov/books/NBK570250/
Caution
如果你是在dbgap申请的项目,需要秘钥下载 如果是GEO的就不用
dbgap:SRA测序数据的cart文件在My Request中SRA data (reads and reference alignments)点击SRA RUN selector GEO:SRA测序数据的cart文件在SRA Run Selected,选择你喜欢的文件,然后点击JWT cart 基因型和表型数据在Phenotype and Genotype files中,点击dbGaP File Selector key密匙在My Projects中点击get dbGaP repository key
以https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE136831 为例 在SRA Run Selector中 SRA测序数据的cart文件在My Request中SRA data (reads and reference alignments)点击SRA RUN selector 基因型和表型数据在Phenotype and Genotype files中,点击dbGaP File Selector
Caution
一般都是在linux系统中运行
windows系统下可以通过wsl2解决
如果是在windows中,需要安装WSL2 教程如下https://learn.microsoft.com/zh-cn/windows/wsl/install 需要查看自己的电脑C盘是否有足够的存储空间,100g以上 可以使用vscode操作wsl2 https://zhuanlan.zhihu.com/p/466001838wget https://download.asperasoft.com/download/sw/connect/3.8.0/ibm-aspera-connect-3.8.0.158555-linux-g2.12-64.tar.gz
tar zxf ibm-aspera-connect-3.8.0.158555-linux-g2.12-64.tar.gz
sh ibm-aspera-connect-3.8.0.158555-linux-g2.12-64.sh
#echo 'PATH=$PATH:~/.aspera/connect/bin/' >> ~/.bashrc #将软件写入系统路径中
source ~/.bashrc
ascp --help
教程:https://github.com/ncbi/sra-tools/wiki/02.-Installing-SRA-Toolkit
#在Ubuntu系统中
wget --output-document sratoolkit.tar.gz https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/current/sratoolkit.current-ubuntu64.tar.gz ###这里下载后会有一个文件夹名
tar -vxzf sratoolkit.tar.gz
#export PATH=$PATH:$PWD/sratoolkit.3.0.7-ubuntu64/bin(格式是export PATH=$PATH:$PWD/上面的文件夹名/bin)(这个命令是把bin放进系统路径中)
#echo '/home/lin/dbgap/sratoolkit.3.0.7-ubuntu64/bin/' >> ~/.bashrc
which fastq-dump
which fasterq-dump ##看看这些重要的函数有没有
fastq-dump --stdout -X 2 SRR390728 ###测试一下工具
vdb-config -i
#MAIN菜单的Enable Remote Access勾上,要远程访问
#CACHE菜单定义储存路径和暂存路径
#AWS菜单的 report cloud instance identity勾上
#accept charges for AWS不能勾,因为会使用aws下载,需要付费账号
#GCP菜单的 report cloud instance identity勾上
#accept charges for GCP不能勾,因为会使用GCP下载,需要付费账号
#save保存并exit
#非dbgap项目
prefetch --cart /mnt/s/twas/dbGap/download_empty2/cart_DAR125750_202310260405.krt #直接使用你的cart文件进行下载
#dbgap项目
prefetch --ngc /mnt/s/twas/dbGap/prj_35587.ngc --cart /mnt/s/twas/dbGap/download_empty2/cart_DAR125750_202310260405.krt -O /mnt/s/twas/dbGap/download_empty
# --ngc是秘钥文件 --cart 是cart文件路径 -O 是存储文件夹路径,不过我发现好像没什么用
# key,cart文件,以及一个空的文件夹用来放数据(缓存的文件夹在前面设置好,别动一般没什么问题)(cart文件和key文件放在同一个下载文件夹中))
fasterq-dump在HowTo: fasterq dump 中有完整的解释 https://github.com/ncbi/sra-tools/wiki/HowTo:-fasterq-dump
fasterq-dump -p -e 10 --split-3 --include-technical /mnt/s/twas/dbGap/download_empty/SRR14213423/SRR14213423.sra
#fasterq-dump --split-3 -p -e 10 #-p的意思是查看进度,-e的意思是调用多线程,后面10设置线程数,--split-3是默认的分割方式,--include-technical不加这个参数是不会分解出来index和barcode文件(https://www.jianshu.com/p/ab98dd332368) https://zhuanlan.zhihu.com/p/591140275有不同的分割方式的介绍 #关于fasterq-dump的详细用法在https://github.com/ncbi/sra-tools/wiki/08.-prefetch-and-fasterq-dump,用很多参数指定,我用了最简单的
nohup prefetch -O . $(<SRR_Acc_List.txt) & #挂在后台下载
具体可以看https://zhuanlan.zhihu.com/p/89024212
还有一些网页下载的方法https://mp.weixin.qq.com/s/p1vlxtKqbYBnwYsJRjNZtA
#!/bin/bash
max_jobs=5 # 同时运行的最大作业数
function wait_for_jobs() {
while [ $(jobs -p | wc -l) -ge $max_jobs ]; do
sleep 1
done
}
for dir in SRR{1..100}; do
if [ -d "$dir" ]; then
for f in "$dir"/*.sralite; do
if [ -f "$f" ]; then
# 等待,直到并行作业数降到下限
wait_for_jobs
# 执行fasterq-dump,并将其放入后台
# nohup fasterq-dump -p -e 10 --split-3 --include-technical "$f" &
nohup fasterq-dump -p -e 10 --split-3 --include-technical -O "$dir" "$f" &
# 短暂休息,以避免立即填满作业队列
sleep 1
fi
done
fi
done
# 等待所有后台作业完成
wait
重命名数据,将其准备为cellranger格式
#!/bin/bash
# 开始和结束的序列号
start=7770
end=7800
for ((i=start; i<=end; i++)); do
dir="SRR2140${i}" # 构造目录名
# 检查目录是否存在
if [ -d "$dir" ]; then
# 构造原始文件名和新文件名,然后重命名
original1="${dir}/${dir}_1.fastq"
new1="${dir}/${dir}_S1_L001_R1_001.fastq.gz"
original2="${dir}/${dir}_2.fastq"
new2="${dir}/${dir}_S1_L001_R2_001.fastq.gz"
# 检查原始文件是否存在,并重命名
if [ -f "$original1" ]; then
mv "$original1" "$new1"
echo "Renamed $original1 to $new1"
else
echo "File $original1 does not exist."
fi
if [ -f "$original2" ]; then
mv "$original2" "$new2"
echo "Renamed $original2 to $new2"
else
echo "File $original2 does not exist."
fi
else
echo "Directory $dir does not exist."
fi
done
将代码集成了一下
max_jobs=5 # 同时运行的最大作业数
function wait_for_jobs() {
while [ $(jobs -p | wc -l) -ge $max_jobs ]; do
sleep 1
done
}
for dir in SRR{1..100}; do
if [ -d "$dir" ]; then
for f in "$dir"/*.sralite; do
if [ -f "$f" ]; then
# 等待,直到并行作业数降到下限
wait_for_jobs
# 使用子shell执行fasterq-dump,重命名,然后压缩命令,并将其放入后台
(
fasterq-dump -p -e 10 --split-3 --include-technical -O "$dir" "$f" &&
mv "$dir"/$(basename "$f" .sralite)_1.fastq "$dir"/$(basename "$f" .sralite)_S1_L001_R1_001.fastq &&
mv "$dir"/$(basename "$f" .sralite)_2.fastq "$dir"/$(basename "$f" .sralite)_S1_L001_R2_001.fastq &&
pigz "$dir"/$(basename "$f" .sralite)_S1_L001_R1_001.fastq &&
pigz "$dir"/$(basename "$f" .sralite)_S1_L001_R2_001.fastq
) &
# 短暂休息,以避免立即填满作业队列
sleep 1
fi
done
fi
done
# 等待所有后台作业完成
wait