我必须使用以下脚本从数据库中下载大量超过100,000个文档:
#!/usr/bin/bash
IFS=$'\n'
set -f
for line in $(cat < "$1")
do
wget https://www.uniprot.org/uniprot/${line}.txt
done
第一次花了一周多的时间下载所有文件(所有文件都在8Kb以下),所以我尝试打开多个终端并运行total.txt的拆分(在10个终端中分别进行10个10000个文件的拆分),我花了14个小时下载了所有文档,有没有办法让脚本帮我做到这一点?
这是列表的示例:
D7E6X7
A0A1L9C3F2
A3K3R8
W0K0I7
答案 0 :(得分:0)
还有另一种方法可以使其快速运行。
现在,您的下载已同步,即在当前下载完成之前,不会开始下一个下载过程。
搜索如何使命令异步/在UNIX上在后台运行。
答案 1 :(得分:0)
gnome-terminal -e命令 要么 xterm -e命令 要么 konsole -e命令 要么 终端-e命令
答案 2 :(得分:0)
手工操作时,打开多个端子很有意义。如果要对此编写脚本,则可以从一个终端/脚本运行多个进程。您可以使用xargs同时启动多个进程:
xargs -a list.txt -n 1 -P 8 -I @ bash -c "wget https://www.uniprot.org/uniprot/@.txt"
位置:
-a list.txt
告诉xargs使用list.txt文件作为输入。-n 1
告诉xargs运行的每个命令(从输入中)最多使用一个参数。-P 8
告诉xargs一次运行8条命令,您可以更改它以适合您的系统/要求。-I @
告诉xargs使用“ @”代表输入(即文件中的行)。