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.