ワイルドカード割り当て変数のパラメータ拡張

ワイルドカード割り当て変数のパラメータ拡張

現在のフォルダ(MA502)に2つのファイルがあり、その名前は -

MA502_TAAGGCGA-TCGCAGG_L001_R1_001.at.fastq
MA502_TAAGGCGA-TCGCAGG_L001_R2_001.at.fastq

たとえば、MA503、MA504などのフォルダがたくさんありますが、そのフォルダを繰り返したいと思います。

ワイルドカードを使用して変数名を割り当てます。

Forward=*R1*.at.fastq
Reverse=*R2*.at.fastq

このファイルをスクリプトとして処理し、最終名が次のように出力を置き換えたいと.at思います。.atqt

MA502_TAAGGCGA-TCGCAGG_L001_R1_001.atqt.fastq
MA502_TAAGGCGA-TCGCAGG_L001_R2_001.atqt.fastq

頑張った

awk 'script' $Forward > ${Forward/.at/.atqt}

私の最終ファイル名は次のとおりです -

*R1*.atqt.fastq

私が期待していたものの代わりに

MA502_TAAGGCGA-TCGCAGG_L001_R1_001.atqt.fastq

私はUnixですべてを学んだので、変数名がどのように処理されるのかわかりません。助けてくれてありがとう!

答え1

このコマンドは、Forward=*R1*.at.fastq変数をForward文字列*R1*.at.fastq(アスタリスク、大文字R、数字1、アスタリスク、ドット、小文字Aなど)に設定します。ワイルドカードは、複数の単語が許可されているコンテキストでのみ拡張されます。変数の割り当ての右側には単一の単語が必要なため、ワイルドカード拡張は発生しません。

同様のコマンドでは、cat $Forward値のワイルドカード文字がForward拡張されます。変数が二重引用符の外に展開されると、その値はスペースで区切られたワイルドカードパターンのリストとして解釈され、パターンが1つ以上のファイルと一致する場合はファイルのリストに置き換えられます。

${Forward/.at/.atqt}最初に変数の値を探します*R1*.at.fastq。その後、その文字列にテキスト置換が適用されます*R1*.atqt.fastq。結果は引用符なしの変数拡張なので、ワイルドカードパターンとして解釈されます。ただし、*R1*.atqt.fastq一致するファイルがないため変更されません。

設定時にワイルドカードを拡張するには、Forward配列にすることができます。

Forward=(*R1*.at.fastq)

Forwardこれは、要素が文字列の1要素配列に設定されますMA502_TAAGGCGA-TCGCAGG_L001_R1_001.at.fastq。ワイルドカードパターンは、複数の単語が予想されるコンテキスト(配列割り当ての周りの括弧)にあるため、一致リストに展開されます。

Bashでisが配列$Forwardの場合、これはスカラー変数と同じ構文を使用して配列変数を参照し、配列の最初の要素を参照するのと同じですForward${Forward[0]}したがって、awk コマンドを変更せずに保持できます。

関連情報