自动下载校验fastq文件

首先,直接在ENA上检索想要下载的数据,如:

image-20240821151842690

有两个信息很重要,MD5值和Aspera链接。

选择TSV下载格式将信息下载下来,然后使用R进行处理,获得最终要的数据格式。R代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
rm(list = ls())

dir("data/生信挖掘/水稻多效基因/data/ENA下载信息/") %>%
as.data.frame() %>%
magrittr::set_names("file") -> df.file

all.ena = NULL

for (i in unique(df.file$file)) {
sprintf("data/生信挖掘/水稻多效基因/data/ENA下载信息/%s", i) %>%
readr::read_delim() %>%
magrittr::set_names(c("Run", "md5", "link")) %>%
dplyr::mutate(md5 = stringr::str_split(md5, ";"),
link = stringr::str_split(link, ";")) %>%
tidyr::unnest() %>%
dplyr::mutate(file = stringr::str_split(link, "/") %>% sapply("[", 7)) %>%
dplyr::select(Run, file, md5, link) %>%
dplyr::bind_rows(all.ena) -> all.ena
}

all.ena %>%
dplyr::select(file, md5, link) %>%
readr::write_delim("data/生信挖掘/水稻多效基因/data/ena.info.txt", delim = "\t", col_names = FALSE)

得到的文件长这样:

image-20240821152147291

把这个文件上传到服务器,就可以开始下载了。批量下载代码(代码来自生信技能树微信公众号):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/bin/bash

# 定义文件列表的文本文件路径
FILE_LIST="ena.info.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 下载文件
# 换成自己的asperaweb_id_dsa.openssh路径
ascp -QT -l 100m -P33001 -k 1 -i ~/mambaforge/envs/tools4bioinf/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"

直接后台运行即可:

1
2
nohup bash dl.sh > dl.log 2>&1 &
echo 1646575 > dl.id

输出日志:

1
2
3
4
5
6
处理文件: SRR12976775_1.fastq.gz
尝试下载文件 (尝试次数: 1 / 10)...
SRR12976775_1.fastq.gz 100% 1420MB 10.7Mb/s 10:12
Completed: 1454518K bytes transferred in 612 seconds
(19438K bits/sec), in 1 file.
文件 SRR12976775_1.fastq.gz 下载成功,并且MD5校验和正确。

自动下载校验fastq文件
http://www.web4xiang.top/blog/article/downloadfastq/
作者
李详【Xiang LI】
发布于
2024年8月21日
许可协议