Extrai o padrão de Directory no GNU parallel

2

Estou executando um software de linha de comando em várias pastas / amostras. Cada pasta tem esses arquivos * fastq.gz.

Abaixo está um exemplo de uma pasta.

Sample_EC_only / EC_only_S1_L005_I1_001.fastq.gz Sample_EC_only / EC_only_S1_L005_R1_001.fastq.gz Sample_EC_only / EC_only_S1_L005_R2_001.fastq.gz Sample_EC_only / EC_only_S1_L006_I1_001.fastq.gz Sample_EC_only / EC_only_S1_L006_R1_001.fastq.gz

Estou tentando executar isso usando o gnu parallel para vários softwares, mas tendo problemas com a extração do "ID" da pasta.

parallel -j $NSLOTS --xapply \
" echo {1}  \
/home/rob2056/software/cellranger-2.2.0/cellranger count --id  = "{basename} {1}"  \
                   --transcriptome=$ref_data \
                   --fastqs={1} \
 " ::: $TMPDIR/FASTQ/Sample* 

Quero extrair por ex. "Sample_EC_only" como um padrão da pasta dentro do gnu parallel. --fastqs é capaz de obter o caminho usando {1}, mas tendo problemas com a opção --id.Eu tentei várias opções para extrair um padrão dos caminhos em {1} mas não funcionando.

O parâmetro --id precisa de um padrão extraído do caminho em {1} para que possa criar um diretório de saída.

Cada {1} consiste em, e. (mostrado abaixo apenas para uma amostra)

/ tmp / FASTQ / Sample_EC_only

    
por Ron 10.09.2018 / 22:01

1 resposta

2

Se bem entendi, tudo o que você está procurando é {1/} em vez de {1} . É o "basename" do argumento. Veja man parallel_tutorial e a discussão sobre --rpl onde temos isso strings de substituição são implementadas como

     --rpl '{/} s:.*/::'

e As strings de substituição posicional também podem ser modificadas usando / etc. Então, {1/} é como remover todos os caracteres até o final / .

Você pode criar suas próprias strings de taquigrafia de substituição usando --rpl seguido por uma string que começa com uma tag ( {/} no exemplo acima), depois uma expressão perl, como o substituto comando acima ( s: padrão : substituição : ).

Não sei ao certo o que é permitido como tags, mas podemos usar o exemplo do tutorial {..} para uma tag posicional, ou seja, que pode ser usado com { número } . A expressão perl para remover tudo até o último / seguido da palavra "Sample_" seria: s:.*/Sample_:: , então você precisa adicionar antes de --xapply os argumentos

--rpl '{..} s:.*/Sample_::'

e, em seguida, use --id={1..} para aplicar essa substituição ao arg 1. Se, por exemplo, você quiser remover a palavra até o primeiro sublinhado _ , em vez de uma palavra fixa Sample , você pode usar um padrão como

--rpl '{..} s:.*/[^_]*_::'

O comando final deve ser parecido com isto:

parallel -j $NSLOTS --rpl '{..} s:.*/Sample_::' --xapply \
" echo {1}  \
/home/rob2056/software/cellranger-2.2.0/cellranger count --id={1/} \
                   --id2={1..} \
           --transcriptome=$ref_data \
           --fastqs={1} \
 " ::: $TMPDIR/FASTQ/Sample* 
    
por 11.09.2018 / 20:04