сопоставление с образцом UNIX - PullRequest
0 голосов
/ 28 марта 2012

Я пытаюсь добиться сопоставления с образцом в коде Perl. Я приведу пример, чтобы было легче объяснить.

Я пытаюсь использовать следующую ссылку в samtools -view:

FTP: //ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00132/alignment/HG00132.mapped.SOLID.bfast.GBR.low_coverage.20111114.bam

samtools позволяет получать только определенную линию данных со следующим синтаксисом:

представление samtools -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-скрипт и заменил ссылку на 'ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data/HG00132/alignment/HG00132.mapped.SOLID.bfast.*.bam'. Но он не распознает ссылку. Поэтому мне было интересно, есть ли подобный способ использования * в Unix, который вы можете использовать в середине текста, а не в конце. Поэтому я хочу заменить GBR звездочкой, а также оставить бит «bam» в дальнем конце имени файла (мне не нужно скачивать файл.)

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 28 марта 2012

Используйте LWP для просмотра FTP. Здесь нет гиперссылок, поэтому вам нужно проанализировать список, чтобы отличить файлы, которые вы хотите отразить. Шарики оболочки типа * не работают, но регулярные выражения подходят.

Не проверенный пример: сбор всех 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 без его предварительной загрузки (см. метод get в LWP :: UserAgent ). Это не означает сохранение его также в локальной файловой системе (это будет метод mirror).

samtools также должен делать это негласно, возможно, используя расширения протокола для загрузки только диапазонов, а не полного файла.

0 голосов
/ 28 марта 2012

Из Примеры расширенного использования wget :

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/
...