接了任务,要从 http://www.ebi.ac.uk/ena/ 下载序列数据,本来直接全部导出 fasta 就好了,可惜网络不好,老是下到一半就挂掉。
于是写了这么个小脚本,用 Perl 的 LWP::Simple
来慢慢下载。
很简单,也可能有 bug。
#!/usr/bin/perl
# by lhtk : lhtk80t7@gmail.com
use strict;
use warnings;
use LWP::Simple;
# http://www.ebi.ac.uk/ena/data/view/FKKI010000001&display=fasta
# 浏览器上打开它,会直接返回文本类型的结果
my $s = $ARGV[0]; # start
my $e; # end
die "不正确\n" unless (defined $s and $s > 0);
while ($s <= 1581707) {
$e = $s + 1000; # 一批 1000 个,可以改
if ($e > 1581707) {
$e = 1581707;
}
my $url;
if ($s == $e) {
$url = sprintf "http://www.ebi.ac.uk/ena/data/view/FKKI01%07d&display=fasta", $s;
} else {
$url = sprintf "http://www.ebi.ac.uk/ena/data/view/FKKI01%07d-FKKI01%07d&display=fasta", $s, $e;
}
#print "$url\n"; # 测试
#last if $n == 2;
if (is_success( getprint($url) )) {
print STDERR "$s - $e\n";
$s = $e + 1;
} else {
sleep 1;
}
}
然后从外部调用:
./xxx.pl 1 >>xxxxx.fa
存个档,备忘。