現在のフォルダ(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 コマンドを変更せずに保持できます。