GNU並列にディレクトリパターンを抽出する

GNU並列にディレクトリパターンを抽出する

複数のフォルダ/サンプルでコマンドラインソフトウェアを実行しています。各フォルダには* fastq.gzなどのファイルがあります。

以下はフォルダの例です。

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_00ly. I1_001.fastq.gz /EC_only_S1_L006_R1_001.fastq.gz

Gnuを使用して複数のソフトウェアを並列に実行しようとしていますが、フォルダの「ID」を抽出するのに問題があります。

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* 

たとえば、gnuパラレル内のフォルダから「Sample_EC_only」をパターンとして抽出したいとします。 --fastqs は {1} を使用してパスを取得できますが、 --id オプションの使用に問題があります。 {1}のパスからパターンを抽出するためにさまざまなオプションを試しましたが、機能しません。

--id引数には、出力ディレクトリを生成できるように{1}のパスから抽出されたパターンが必要です。

各{1}は次のように構成されています(以下には1つの例のみが表示されます)。

/tmp/FASTQ/Sample_EC_only

ベストアンサー1

私が正しく理解した場合、あなたが探しているのはパラメータの「デフォルト名」では{1/}ありません。{1}バラより人間並列_チュートリアル--rplそして私たちはどこでこのような議論をしますか?文字列置換の実装は次のとおりです。

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

そして位置置換文字列は、次のように変更することもできます。/など。{1/}最後の文字の前のすべての文字を削除するのと同じです/


--rpl文字列の後に文字列を使用して、独自の代替短縮文字列を作成できます。商標{/}上記の例では)後に上記の置換コマンドなどのPerl式が続きます(s:模様:代替:)。

許可されているタグが何であるかはわかりませんが、チュートリアルの例を{..}場所タグとして使用できます。{数字}/最後の単語「Sample_」の前のすべてを削除するPerl式は次のとおりです。s:.*/Sample_::したがって、--xapply引数の前に追加する必要があります。

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

次に、を--id={1..}使用して、この代替エントリを引数1に適用します。たとえば、最初のアンダースコアの前の単語を削除するには、単語を変更する_代わりに、Sample次のパターンを使用できます。

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

最終コマンドは次のようになります。

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* 

おすすめ記事