使用人工智能优化一个数据库文件批量下载脚本

学完了生信技能树的马拉松授课,算是掌握了跟人工智能对话的基础,比如前些日子看到的练习题:PDX小鼠模型的单细胞样品定量能选择人类参考基因组吗,是需要下载这个CRA010501数据集里面的单细胞转录组样品的fq文件,然后走cellranger定量流程,选择人类以及小鼠参考基因组,各自走一遍定量流程,然后两个表达量矩阵分开做一下降维聚类分群哈, 看看背后是否有一些被忽略的生物学现象。

需要使用的数据库文件批量下载脚本是 :

for i in {34..39};do ( axel -n 20 https://download.cncb.ac.cn/gsa2/CRA010501/CRR7274${i}/CRR7274${i}_f1.fq.gz );done
for i in {34..39};do ( axel -n 20 https://download.cncb.ac.cn/gsa2/CRA010501/CRR7274${i}/CRR7274${i}_r2.fq.gz );done

如果网络好基本上也就是等一个晚上就下载完毕,但是大部分情况下,这个下载会中断!

我首先让人工智能帮我解析了这个脚本

这段Shell脚本代码是一个简单的循环,用于在指定的数字范围内(34到39)执行一个下载命令。下面是对代码的逐行解析:

for i in {34..39}; do
  • for i in {34..39}:这是一个for循环,i是循环变量,{34..39}是一个序列表达式,表示从34开始到39结束的整数序列。每次循环,i依次取34, 35, 36, 37, 38, 39这些值。
( axel -n 20 https://download.cncb.ac.cn/gsa2/CRA010501/CRR7274${i}/CRR7274${i}_f1.fq.gz )
  • axel:这是一个下载工具,用于下载网络文件。它类似于wget,但通常提供更快的下载速度。
  • -n 20axel的选项,表示同时进行20个下载线程。
  • https://download.cncb.ac.cn/gsa2/CRA010501/CRR7274${i}/CRR7274${i}_f1.fq.gz:这是下载文件的URL。${i}会被替换为当前循环的值,例如在第一次循环中,${i}会被替换为34,从而下载CRR727434_f1.fq.gz文件。
done
  • done:表示for循环的结束。

整个脚本的作用是使用axel工具并发下载序列34到39对应的.fq.gz文件。这些文件名遵循模式CRR7274XX_f1.fq.gz,其中XX是循环变量i的值。

需要注意的是,这个脚本中的URL是硬编码的,假设文件结构和URL模式是匹配的。如果URL模式与实际文件结构不匹配,脚本将无法正确下载文件。此外,脚本没有错误处理机制,例如处理下载失败的情况。在实际使用中,可能需要添加适当的错误检查和日志记录。

然后让人工智能帮我修改了它

因为理论上这个代码应该是下载6个文件,但是经常运行卡死,然后就成功了3个文件,需要改进!!!

如果脚本在下载过程中卡死,但最终只成功下载了3个文件,可能是由于几个原因造成的,例如网络问题、服务器限制、本地磁盘写入问题或者axel命令的稳定性等。以下是一些建议来改进脚本:

  1. 增加错误处理
    使用set -e来使脚本在遇到错误时立即退出,这样可以更快地发现问题所在。

  2. 检查网络连接
    确保网络连接稳定,如果可能的话,使用带有重试机制的下载工具,如curlwget的重试选项。

  3. 限制并发数
    如果服务器对并发连接数有限制,可能需要减少-n参数指定的线程数。

  4. 磁盘空间检查
    确保有足够的磁盘空间来存储下载的文件。

  5. 使用重试逻辑
    为下载命令添加重试逻辑,例如使用axel -a -n 20 URL,其中-a选项会在下载失败时重试。

  6. 日志记录
    使用日志记录每个下载尝试的结果,便于事后分析问题。

  7. 检查服务器限制
    检查下载服务器是否有任何速率限制或IP封锁策略。

  8. 使用其他下载工具
    如果axel不稳定,可以尝试使用其他下载工具,比如wgetcurl

  9. 增加延时
    在循环中增加延时,避免同时对服务器发起过多请求。

  10. 检查磁盘写入权限
    确保脚本运行的用户有足够的权限在目标目录写入文件。

  11. 使用断点续传
    使用支持断点续传的下载工具,这样即使下载中断也可以从中断的地方继续下载。

  12. 监控下载进度
    使用axel--progress选项来监控下载进度。

  13. 使用脚本监控工具
    使用如screentmux等工具来运行脚本,这样即使终端会话断开,下载进程也不会终止。

下面是添加了一些改进的脚本示例:

#!/bin/bash

set -e # 遇到错误立即退出

for i in {34..39}; do
 echo "开始下载文件:CRR7274${i}_f1.fq.gz"
 axel -q -a -n 20 https://download.cncb.ac.cn/gsa2/CRA010501/CRR7274${i}/CRR7274${i}_f1.fq.gz || true # 重试逻辑,失败不退出
 if [ $? -eq 0 ]; then
 echo "下载成功:CRR7274${i}_f1.fq.gz"
 else
 echo "下载失败:CRR7274${i}_f1.fq.gz"
 fi
 sleep 1 # 增加延时
done

这个脚本在每次下载尝试失败后不会退出,而是继续尝试下载下一个文件,并且在每次下载尝试之间增加了一秒的延时。同时,脚本会在控制台输出每次下载的开始和结束状态。

值得注意的是人工智能说其中-a选项会在下载失败时重试,但似乎这个知识点有问题!而且很明显上面的代码虽然说最后都会给出来很好的日志信息,但是并不能成功下载:

cat nohup.out 
开始下载文件:CRR727434_f1.fq.gz
SSL error: (null)
下载成功:CRR727434_f1.fq.gz
开始下载文件:CRR727435_f1.fq.gz
SSL error: (null)
下载成功:CRR727435_f1.fq.gz
开始下载文件:CRR727436_f1.fq.gz
下载成功:CRR727436_f1.fq.gz
开始下载文件:CRR727437_f1.fq.gz
SSL error: (null)
下载成功:CRR727437_f1.fq.gz
开始下载文件:CRR727438_f1.fq.gz
SSL error: (null)
下载成功:CRR727438_f1.fq.gz
开始下载文件:CRR727439_f1.fq.gz
下载成功:CRR727439_f1.fq.gz

最后我让它介绍了一下这个数据库本

download.cncb.ac.cn 是中国科学院北京基因组研究所(China National Center for Biotechnological Information, CNCB)提供的数据库下载站点。这个数据库主要提供与基因组学相关的数据下载服务,包括但不限于以下几类:

  1. 基因组序列数据:提供不同物种的完整基因组序列或特定区域的序列数据。

  2. 转录组数据:包括RNA测序(RNA-Seq)数据,用于研究基因表达模式。

  3. 蛋白质组数据:提供蛋白质鉴定和定量的数据。

  4. 表观遗传学数据:如DNA甲基化、组蛋白修饰等数据。

  5. 变异和多态性数据:包括单核苷酸多态性(SNPs)、插入/缺失(InDels)等。

  6. 其他组学数据:例如代谢组学、微生物组学等。

关于ID系列的规则,不同的数据库可能有不同的命名规则,但通常这些ID遵循一定的命名约定,以确保它们是唯一的并能够提供关于数据的有用信息。例如:

  • 项目或样本标识符:通常是一个独特的参考编号,如CRA010501CRR7274,可能代表一个特定的研究项目或样本。

  • 序列标识符:可能包含序列类型和数字,如f1.fq.gz可能表示FASTQ格式的第一条序列。

  • 文件扩展名:指示文件格式,如.gz表示GZIP压缩文件,.fq.fastq表示FASTQ文件。

  • 版本号或部分编号:有时ID可能包含版本信息或部分数据标识,如12等。

  • 组合ID:一些ID可能组合了多个元素,如CRR7274${i},其中${i}是一个变量,代表序列中的特定部分或样本编号。

如果需要了解特定数据库的ID规则,通常可以查看数据库的用户指南或FAQ部分,或者直接联系数据库的管理员获取更详细的信息。由于数据库的具体规则可能随时更新,获取最新的信息总是一个好主意。对于download.cncb.ac.cn数据库,如果需要更具体的信息,建议访问其官方网站或联系他们的技术支持获取帮助。

其实是需要借助于高级工具(这一点目前人工智能无解啊)

其实是需要看官网了,因为人工智能并没有太多关于这个中国科学院北京基因组研究所(China National Center for Biotechnological Information, CNCB)提供的数据库下载站点的信息,所以它也很陌生,我是自己去看官网才发现:

提示: HTTP下载速度有限,推荐使用Egde Turbo或FTP客户端(比如 FileZilla Client)下载数据。 EgdeTurbo支持Linux命令行、Windows/Mac平台的Chrome、Edge和Firefox浏览器。就需要自己下载edgeturbo这个二进制软件,然后使用它的download 命令即可,在linux终端上输入以下命令进行下载软件:

mkdir -p ~/biosoft/
cd ~/biosoft/
wget https://ngdc.cncb.ac.cn/ettrans/download/edgeturbo-client.linux.latest.cncb.tar.gz

然后解压即可使用啦

tar -zxvf edgeturbo-client.linux.latest.cncb.tar.gz
 ~/biosoft/edgeturbo-client/edgeturbo --help

比如我们上面练习题:PDX小鼠模型的单细胞样品定量能选择人类参考基因组吗,是需要下载这个CRA010501数据集里面的单细胞转录组样品的fq文件,只需要一行代码即可,非常方便!

 ~/biosoft/edgeturbo-client/edgeturbo dl /gsa2/CRA010501/ 
 ~/biosoft/edgeturbo-client/edgeturbo dl /gsa2/CRA008674/

基本上两三个小时就下载完毕了;

├── [4.0K] CRR727434
│ ├── [10.0G] CRR727434_f1.fq.gz
│ ├── [ 11G] CRR727434_r2.fq.gz
│ └── [1.1K] CRR727434_sta.xml
├── [4.0K] CRR727435
│ ├── [ 12G] CRR727435_f1.fq.gz
│ ├── [ 13G] CRR727435_r2.fq.gz
│ └── [1.1K] CRR727435_sta.xml
├── [4.0K] CRR727436
│ ├── [ 17G] CRR727436_f1.fq.gz
│ ├── [ 18G] CRR727436_r2.fq.gz
│ └── [1.1K] CRR727436_sta.xml
├── [4.0K] CRR727437
│ ├── [ 14G] CRR727437_f1.fq.gz
│ ├── [ 14G] CRR727437_r2.fq.gz
│ └── [1.1K] CRR727437_sta.xml
├── [4.0K] CRR727438
│ ├── [ 12G] CRR727438_f1.fq.gz
│ ├── [ 13G] CRR727438_r2.fq.gz
│ └── [1.1K] CRR727438_sta.xml
├── [4.0K] CRR727439
│ ├── [ 12G] CRR727439_f1.fq.gz
│ ├── [ 13G] CRR727439_r2.fq.gz
│ └── [1.1K] CRR727439_sta.xml
└── [ 876] md5sum.txt

6 directories, 19 files

而且很容易检测 md5sum.txt,说明下载的文件是完整的。接下来就完完全全参考 小鼠的5个样品的10x技术单细胞转录组上游定量(文末赠送全套代码),走cellranger流程即可

Comments are closed.