我正在尝试在perl代码中实现模式匹配。我将举一个例子,以便更容易解释。
我正在尝试使用samtools -view中的以下链接:
samtools只允许使用以下语法检索特定的数据行:
samtools view -h ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00132/alignment/HG00132.mapped.SOLID.bfast.GBR.low_coverage.20111114.bam 1:123-1234
其中有1000个和GBR'链接的位改变了。所以我写了一个简单的perl脚本并用&ft; // ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00132/alignment/HG00132.mapped.SOLID.bfast.*替换了这个链接。 BAM&#39 ;.但它无法识别链接。所以我想知道在unix中是否有类似的使用*的方法,你可以在文本的中间而不是在结尾使用。所以我想用一个明星替换GBR,并保持' bam'位于文件名远端的位(我不需要下载文件。)
提前谢谢
答案 0 :(得分:1)
使用LWP浏览FTP。没有超链接,因此您必须解析列表以区分要镜像的文件。像*
这样的Shell globs不起作用,但正则表达式是合适的。
未经测试的示例:从指定目录收集所有bam
URI。
use File::Listing qw(parse_dir);
use LWP::UserAgent qw();
my @bam_files;
my $base = 'ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00132/alignment/';
my $ua = LWP::UserAgent->new;
my $index = $ua->get($base);
for my $entry (parse_dir $index->decoded_content) {
my $filename = $entry->[0];
next unless $filename =~ /bam$/;
push @bam_files, $base . $filename;
}
如果不先下载FTP文件就不可能使用它(参见method get
in LWP::UserAgent)。这并不意味着也将它保存在本地文件系统上(即方法mirror
)。
samtools也必须在幕后执行此操作,也许使用协议扩展来仅下载范围,而不是完整文件。
答案 1 :(得分:0)
来自wget advanced usage examples:
You want to download all the GIFs from an HTTP directory.
wget http://host/dir/*.gif doesn't work, since HTTP retrieval does not support
globbing. In that case, use:
wget -r -l1 --no-parent -A.gif http://host/dir/