現在のフォルダー(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では必要に応じてすべてを学んだので、変数名がどのように処理されるのかわかりません。どんな助けでもありがたいです!
コマンドForward=*R1*.at.fastq
は、変数Forward
を文字列*R1*.at.fastq
(スター、大文字のR、数字の1、スター、ドット、小文字のAなど)に設定します。ワイルドカードは、複数の単語を許可するコンテキストでのみ展開されます。変数割り当ての右側のサイズは単一のWordを想定しているため、ワイルドカードの展開は行われません。
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では、Forward
が配列である場合の$Forward
は${Forward[0]}
と同等です。スカラー変数と同じ構文で配列変数を参照すると、配列の最初の要素が参照されます。したがって、awkコマンドを変更しないでおくことができます。