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*