经常下载过ngs项目公共数据集的小伙伴们都是知道fastq文件非常大而且不同数据库访问情况都不太稳定。
详见:aspera的高速下载确实很快吗,需要自己在服务器上面配置好conda,然后执行conda的安装两个软件(kingfisher和aspera),我们一般来说会推荐极简下载代码,就是一个循环而已;
首先自己制作文件名字(fq.txt )内容如下所示::
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR174/083/SRR17418283/SRR17418283_1.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR174/083/SRR17418283/SRR17418283_2.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR174/086/SRR17418286/SRR17418286_1.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR174/086/SRR17418286/SRR17418286_2.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR174/087/SRR17418287/SRR17418287_1.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR174/087/SRR17418287/SRR17418287_2.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR174/090/SRR17418290/SRR17418290_1.fastq.gz
fasp.sra.ebi.ac.uk:/vol1/fastq/SRR174/090/SRR17418290/SRR17418290_2.fastq.gz
有了上面的文件(fq.txt ),接下来就只需要一个脚本即可:step1-aspera.sh
cat fq.txt |while read id
do
ascp -QT -l 300m -P33001 -k 1 \
-i ~/miniconda3/envs/download/etc/asperaweb_id_dsa.openssh \
era-fasp@$id .
done
# mamba activate download
# nohup bash step1-aspera.sh 1>step1-aspera.log 2>&1 &
# which ascp
## 一定要搞清楚你的软件被conda安装在哪,以及它配套的asperaweb_id_dsa.openssh 文件的路径
但是因为aspera对应的ebi数据库经常是访问有问题,会导致如下所示的下载失败;
ls -lh |cut -d" " -f5-
770 7月 19 10:03 fq.txt
19M 7月 19 10:07 SRR17656233_1.fastq.gz
64 7月 19 10:07 SRR17656233_1.fastq.gz.aspx
18M 7月 19 10:07 SRR17656233_2.fastq.gz
64 7月 19 10:07 SRR17656233_2.fastq.gz.aspx
0 7月 19 10:07 SRR17656234_1.fastq.gz
64 7月 19 10:08 SRR17656234_1.fastq.gz.aspx
67M 7月 19 10:10 SRR17656234_2.fastq.gz
64 7月 19 10:10 SRR17656234_2.fastq.gz.aspx
0 7月 19 10:02 SRR17656237_1.fastq.gz
0 7月 19 10:02 SRR17656237_2.fastq.gz
0 7月 19 10:02 SRR17656238_1.fastq.gz
0 7月 19 10:02 SRR17656238_2.fastq.gz
0 7月 19 10:02 SRR17656241_1.fastq.gz
1.3M 7月 19 10:05 SRR17656241_2.fastq.gz
64 7月 19 10:06 SRR17656241_2.fastq.gz.aspx
如果一次性下载好几百个文件,很容易失败几十个,然后挑出来继续下载然后继续失败,反反复复很浪费时间。这个时候可以借助于人工智能大模型写一个自动化校验文件的md5信息自动删除失败的文件然后重新下载。
如果是文件下载成功而且md5校验成功
会有如下所示的日志信息;
Completed: 268115K bytes transferred in 89 seconds
(24415K bits/sec), in 1 file.
文件 SRR17656258_1.fastq.gz 下载成功,并且MD5校验和正确。
处理文件: SRR17656258_2.fastq.gz
尝试下载文件 (尝试次数: 1 / 10)...
Completed: 269769K bytes transferred in 74 seconds
(29520K bits/sec), in 1 file.
文件 SRR17656258_2.fastq.gz 下载成功,并且MD5校验和正确。
处理文件: SRR17656262_1.fastq.gz
尝试下载文件 (尝试次数: 1 / 10)...
Completed: 231723K bytes transferred in 64 seconds
(29363K bits/sec), in 1 file.
文件 SRR17656262_1.fastq.gz 下载成功,并且MD5校验和正确。
处理文件: SRR17656262_2.fastq.gz
尝试下载文件 (尝试次数: 1 / 10)...
Completed: 234184K bytes transferred in 217 seconds
(8809K bits/sec), in 1 file.
文件 SRR17656262_2.fastq.gz 下载成功,并且MD5校验和正确。
处理文件: SRR17656229_1.fastq.gz
如果是文件下载成功但是md5校验失败
就需要代码自动化判断,然后继续尝试下载,直到md5校验成功,比如下面的两个样品,都是下载了两三次才md5校验成功。其实每次重新尝试都是可以下载成功但是校验失败。
处理文件: SRR17656233_1.fastq.gz
尝试下载文件 (尝试次数: 1 / 10)...
Completed: 554541K bytes transferred in 645 seconds
(7032K bits/sec), in 1 file.
文件校验失败,正在重试...
尝试下载文件 (尝试次数: 2 / 10)...
Completed: 554541K bytes transferred in 942 seconds
(4819K bits/sec), in 1 file.
文件校验失败,正在重试...
尝试下载文件 (尝试次数: 3 / 10)...
Completed: 554541K bytes transferred in 544 seconds
(8345K bits/sec), in 1 file.
文件 SRR17656233_1.fastq.gz 下载成功,并且MD5校验和正确。
处理文件: SRR17656233_2.fastq.gz
尝试下载文件 (尝试次数: 1 / 10)...
Completed: 556271K bytes transferred in 850 seconds
(5357K bits/sec), in 1 file.
文件校验失败,正在重试...
尝试下载文件 (尝试次数: 2 / 10)...
Completed: 556271K bytes transferred in 707 seconds
(6437K bits/sec), in 1 file.
文件 SRR17656233_2.fastq.gz 下载成功,并且MD5校验和正确。
如果是网络失败
就不会下载到fq文件,就没办法校验,会出现下面的日志:
Startup failed, exit
md5sum: SRR17656242_1.fastq.gz: No such file or directory
文件校验失败,正在重试...
尝试下载文件 (尝试次数: 8 / 10)...
ascp: Target address not available
Startup failed, exit
md5sum: SRR17656242_1.fastq.gz: No such file or directory
文件校验失败,正在重试...
尝试下载文件 (尝试次数: 9 / 10)...
ascp: Target address not available
Startup failed, exit
md5sum: SRR17656242_1.fastq.gz: No such file or directory
文件校验失败,正在重试...
尝试下载文件 (尝试次数: 10 / 10)...
ascp: Target address not available
Startup failed, exit
md5sum: SRR17656242_1.fastq.gz: No such file or directory
让我们看看人工智能大模型给出来的代码吧
我仅仅是把aspera的高速下载确实很快吗里面的基础代码发给人工智能大模型,然后给出来自己的需求,它就可以完成了:
#!/bin/bash
# 定义文件列表的文本文件路径
FILE_LIST="input.txt"
# 定义最大重试次数
MAX_RETRIES=10
# 检查文件列表文件是否存在
if [ ! -f "$FILE_LIST" ]; then
echo "文件列表文件 $FILE_LIST 不存在。"
exit 1
fi
# 读取文件列表文件
while read -r filename md5sum download_url; do
echo "处理文件: $filename"
# 定义下载的文件路径
download_path="$filename"
# 初始化重试次数
retries=0
# 循环直到文件校验成功或达到最大重试次数
while [ $retries -lt $MAX_RETRIES ]; do
echo "尝试下载文件 (尝试次数: $((retries + 1)) / $MAX_RETRIES)..."
# 使用curl下载文件
#curl -o "$download_path" -L "$download_url"
# 使用 ascp 下载文件
ascp -QT -l 300m -P33001 -k 1 \
-i ~/miniconda3/envs/download/etc/asperaweb_id_dsa.openssh \
era-fasp@$download_url .
# 计算下载文件的MD5校验和
actual_md5=$(md5sum "$download_path" | awk '{print $1}')
# 校验文件
if [ "$actual_md5" = "$md5sum" ]; then
echo "文件 $filename 下载成功,并且MD5校验和正确。"
break
else
echo "文件校验失败,正在重试..."
rm "$download_path"
retries=$((retries + 1))
fi
done
# 检查是否达到最大重试次数
if [ $retries -eq $MAX_RETRIES ]; then
echo "文件 $filename 下载和校验失败,已达到最大重试次数。"
# exit 1
fi
done < "$FILE_LIST"
上面的shell脚本需要读取一个文本文件input.txt,它的内容节选如下所示:
SRR17656233_1.fastq.gz 14f36c82df316bfcda3070db182461e6 fasp.sra.ebi.ac.uk:/vol1/fastq/SRR176/033/SRR17656233/SRR17656233_1.fastq.gz
SRR17656233_2.fastq.gz 1fdad0e3c4d17c35721d4f4fe7518f18 fasp.sra.ebi.ac.uk:/vol1/fastq/SRR176/033/SRR17656233/SRR17656233_2.fastq.gz
SRR17656234_1.fastq.gz eaf46f1d519bb050ab654d5975f4706e fasp.sra.ebi.ac.uk:/vol1/fastq/SRR176/034/SRR17656234/SRR17656234_1.fastq.gz
SRR17656234_2.fastq.gz f68099418142c70d7abae1728c4562ef fasp.sra.ebi.ac.uk:/vol1/fastq/SRR176/034/SRR17656234/SRR17656234_2.fastq.gz
SRR17656237_1.fastq.gz b30ab3b951086cef51ac545c9b06cea7 fasp.sra.ebi.ac.uk:/vol1/fastq/SRR176/037/SRR17656237/SRR17656237_1.fastq.gz
SRR17656237_2.fastq.gz 8aee6152c6c3bc280e5b120d008d9a73 fasp.sra.ebi.ac.uk:/vol1/fastq/SRR176/037/SRR17656237/SRR17656237_2.fastq.gz
SRR17656238_1.fastq.gz 2a24527bcbd9cc8faa87af1c2cd129e1 fasp.sra.ebi.ac.uk:/vol1/fastq/SRR176/038/SRR17656238/SRR17656238_1.fastq.gz
SRR17656238_2.fastq.gz 56802f4f4c0202ea72506e46720575e2 fasp.sra.ebi.ac.uk:/vol1/fastq/SRR176/038/SRR17656238/SRR17656238_2.fastq.gz
SRR17656241_1.fastq.gz ccdad148ae44ca4d7be4ba95a5c383c0 fasp.sra.ebi.ac.uk:/vol1/fastq/SRR176/041/SRR17656241/SRR17656241_1.fastq.gz
SRR17656241_2.fastq.gz 25533fed6cba16c073ef26080cc948cc fasp.sra.ebi.ac.uk:/vol1/fastq/SRR176/041/SRR17656241/SRR17656241_2.fastq.gz