Vous pouvez essayer d'utiliser une boucle pour extraire la partie importante du nom de fichier:
for file in ./*.gz; do newname=$(echo $file | sed -re 's/^([^ACAGTG]+).*(R[1-3]).*/\1\2\.fastq\.gz/g'); echo $newname; done
Cela vous donnera simplement une nouvelle liste de noms de fichiers. Vous pouvez ensuite les déplacer:
for file in ./*.gz; do newname=$(echo $file | sed -re 's/^([^ACAGTG]+).*(R[1-3]).*/\1\2\.fastq\.gz/g'); mv $file $newname; done
Pour décomposer un peu:
boucle
- sur les fichiers * .gz
- créer une variable qui exclut le contenu inutile du nom
- déplacer le nom de fichier à ce nouveau nom
Je m'attends à ce qu'il y ait de meilleures façons de le faire, mais c'est ce que j'ai imaginé Du haut de ma tête.
Test:
$ ls
40_END_251_GTGAAA_L002_R1_001.fastq.gz 40_END_251_GTGAAA_L002_R2_001.fastq.gz 5_END_1033_ACAGTG_L002_R1_001.fastq.gz 5_END_1033_ACAGTG_L002_R2_001.fastq.gz
$ for file in ./*.gz; do newname=$(echo $file | sed -re 's/^([^ACAGTG]+).*(R[1-3]).*/\1\2\.fastq\.gz/g'); echo $newname; done
./40_END_251_R1.fastq.gz
./40_END_251_R2.fastq.gz
./5_END_1033_R1.fastq.gz
./5_END_1033_R2.fastq.gz
$ for file in ./*.gz; do newname=$(echo $file | sed -re 's/^([^ACAGTG]+).*(R[1-3]).*/\1\2\.fastq\.gz/g'); mv $file $newname; done
$ ls
40_END_251_R1.fastq.gz 40_END_251_R2.fastq.gz 5_END_1033_R1.fastq.gz 5_END_1033_R2.fastq.gz
Remarque que je fais cela dans bash 4.4.5
EDIT Donné Je ne suis pas tout à fait sûr que les colonnes du nom sont les plus importants , awk
pourrait mieux fonctionner:
for file in ./*.gz; do newname=$(echo $file | awk -F'_' '{print $2 "_" $3 "_" $6}' -); echo $newname; done
Ceci partagera le nom du fichier par _
et vous permettent de référencer les colonnes que vous voulez à l'aide $X
:
for file in ./*.gz; do newname=$(echo $file | awk -F'_' '{print $2 "_" $3 "_" $6}' -); mv $file "${newname}.fastq.gz"; done
Merci beaucoup :) – Kisun
Je viens de réaliser que cela ne fonctionne pas dans toutes les situations comme: 17_END_107A_CGATGT_L005_R1_001.fastq. gz et 29_END_4271A_ACAGTG_L008_R1_001.fastq.gz. En outre, je préférerais sortir des nombres et des premiers "_" i.e 40_, 5_, etc. – Kisun
Laissez-moi voir si je peux l'ajuster :) – bedwyr