我必须使用以下脚本从数据库中下载超过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发布于 2020-03-04 13:04:48
gnome-terminal -e命令或xterm -e命令或konsole -e命令或terminal -e命令
发布于 2020-03-04 12:24:57
还有另一种方法可以让它变得更快。
现在你的下载是同步的,也就是说,下一个下载过程直到当前下载完成才会开始。
搜索如何在unix上使命令异步/在后台运行。
发布于 2020-03-04 17:26:16
当您手动执行此操作时,打开多个终端是有意义的。如果要编写脚本,可以从一个终端/脚本运行多个进程。您可以使用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文件,因为input.-n 1告诉xargs为每个命令使用最多一个参数(来自输入)它runs.-P 8告诉xargs一次运行8个命令,您可以更改它以适应您的system/requirements.-I @告诉xargs使用"@“来表示输入(即文件中的行)。https://stackoverflow.com/questions/60518899
复制相似问题