Extension de paramètre dans la variable assignée avec un caractère générique

J'ai deux files dans mon dossier actuel (MA502) dont les noms sont –

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

J'ai beaucoup de tels dossiers – ex MA503, MA504 etc, et je veux boucler sur ceux-ci.

J'atsortingbue mes noms de variables en utilisant des caractères generics –

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

Je veux traiter ces files dans un script, et je veux que ma sortie remplace .at en .atqt , de sorte que le nom final ressemblerait –

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

j'ai essayé

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

Mon nom de file final ressemble à –

 *R1*.atqt.fastq 

au lieu de mon attente qui était

 MA502_TAAGGCGA-TCGCAGG_L001_R1_001.atqt.fastq 

J'ai tout appris par nécessité sur unix, donc je ne suis pas sûr de savoir comment les noms de variables sont traités. Toute aide est appréciée!

La command Forward=*R1*.at.fastq définit la variable Forward sur la string *R1*.at.fastq (écanvas, majuscule R, chiffre 1, écanvas, point, minuscule A, etc.). Les caractères generics ne sont étendus que dans des contexts autorisant plusieurs mots; la taille de droite d'une affectation de variable attend un seul mot, de sorte qu'aucune expansion de caractères generics ne se produit.

Dans une command comme cat $Forward , les caractères generics dans la valeur de Forward sont développés. Lorsqu'une variable est développée en dehors des guillemets doubles, sa valeur est interprétée comme une list de motifs generics séparés par des espaces, et si un model correspond à un ou plusieurs files, il est remplacé par la list des files.

Dans ${Forward/.at/.atqt} , la valeur de la variable est d'abord recherchée: *R1*.at.fastq . Ensuite, la substitution de text est appliquée à cette string, donnant *R1*.atqt.fastq . Le résultat est une expansion variable non cotée, donc elle est interprétée comme un motif générique. Mais *R1*.atqt.fastq ne correspond à aucun file, donc il rest inchangé.

Pour développer le caractère générique lors de la définition de l' Forward , vous pouvez en faire un tableau.

 Forward=(*R1*.at.fastq) 

Cela définit Forward sur un tableau à 1 élément, l'élément étant la string MA502_TAAGGCGA-TCGCAGG_L001_R1_001.at.fastq . Le model générique est étendu à la list des correspondances car il se trouve dans un context (les parenthèses de l'assignation du tableau) où plusieurs mots sont attendus.

En bash, $Forward quand Forward est un tableau est équivalent à ${Forward[0]} – referencer une variable de tableau avec la même syntaxe qu'une variable scalaire fait reference au premier élément du tableau. Vous pouvez donc laisser votre command awk inchangée.